c语言代码:将任意十进制整数(包括负数)转化为二进制数,求解决。。
负数是在正数的基础上取反再+1
整数按32位处理,正数转换结果:
代码如下:
#include <stdio.h>
//将正整数转换为二进制(32位)
void trans(int n,char buf[])
{
int i=0;
for(i=0;i<32;i++)
buf[i]='0';
i=31;
while(n)
{
buf[i]=n%2+'0';
i--;
n/=2;
}
}
int main()
{
int n,i,flag=1;
char buf[33]={0};
printf("请输入一个数:");
scanf("%d",&n);
if(n>=0)
trans(n,buf);
else
{
trans(-n,buf);
//取反
for(i=31;i>=0;i--)
{
//取反
if(buf[i]=='0')
buf[i]='1';
else
buf[i] = '0';
}
//+1
for(i=31;i>=0;i--) //flag表示进位
{
if(flag==1 && buf[i]=='1')
{
buf[i]='0';
flag = 1;
}else if(flag==1 && buf[i]=='0')
{
buf[i]='1';
flag = 0;
}else if(flag==0 && buf[i]=='0')
{
buf[i]='0';
flag = 0;
}else
{
buf[i]='1';
flag = 0;
}
}
}
printf("%s",buf);
return 0;
}
#include <stdio.h> //引用头文件
main()
{
int i,j,n,m,a[16]={0}; //定义变量i,i,m,和数组a[],并赋初值为0;
printf("请输入您想转化的十进制数字:(0-32767):"); //输入转化的数字
scanf("%d",&n);
for(m=0;m<15;m++) //for循环从0到14位,最高位为符号位,本题始终为0;
{
i=n%2; //每次取n%2的余数;
j=n/2; //把n/2的整数部分赋值给j,
n=j; //让j=n;从n再执行下一次循环。
a[m]=i; //并把每次的余数i赋给数组a[];
}
for(m=15;m>=0;m--) //for循环,将数组中的元素倒叙输出,即为转化后的二进制数字。
{
printf("%d",a[m]);
if(m%4==0) //为了格式美观,每隔四个数字打印一个空格。
printf(" ");
}
printf("\n");
}
代码如下(仅正整数的实现):
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main( )
{
int n,i=0;
double sum=0;
printf("输入一个正整数:\n");
scanf("%d",&n);
do{
if(n % 2 == 1) sum += pow(10,i); //D = (n % 2) * pow(10,i)
n /= 2; //n = n / 2
i++; //i = i + 1
}while(n != 0); //非 0,则重复“除 2 取余”转换
printf("二进制数序列是:%.0lf\n",sum);
return 0;
}
运行结果如图: