1.比较简单的除法求余数,最终返回一个整形数,处理数字过大会溢出,不推荐。
#include"stdio.h"
#include"stdlib.h"
int DecimalToBinary(int input);
int main(void)
{
int input,result;
printf("INPUT:");
scanf("%d",&input);
result = DecimalToBinary(input);
printf("%d的二进制格式为:%d\n",input,result);
exit(0);
}
/* 十进制转二进制函数
* @result :返回值,以十进制格式显示二进制
* @time :取余次数
* @remainder :暂时存放余数
* 注:1.如果输入的数太大会溢出,2.不能直接打印出负数在计算机中的二进制格式。
* eg: int:-2,147,483,648 ~ 2,147,483,647 一共是10位 ,如果输入的数的二进制格式是11位则会溢出
* eg: -220 只会输出: -11011100
* */
int DecimalToBinary(int input)
{
int result,time,remainder;
time = 1;
result = 0;
while(input)
{
remainder = input % 2;
result += remainder * time;
time *= 10;
input /= 2;
}
return result;
}
2.通过取余数返回一个数组的形式,可以用,自己注意处理负数时另外添加负号吧。
#include"stdio.h"
#include"stdlib.h"
int DecimalToBinary(int input,int *result);
int main(void)
{
int input,len;
int result[32] = {0};
printf("INPUT:");
scanf("%d",&input);
len = DecimalToBinary(input,result);
for(int i = len; i >= 0; i--)
printf("%d",result[i]);
printf("\n");
exit(0);
}
/* 十进制转二进制函数
* @input :要处理的数
* @result :转换结果存储地址
* 注:(负数返回结果为:绝对值的二进制)
* */
int DecimalToBinary(int input,int *result)
{
int i=0;
if(input == 0) return 0;
while(input)
{
result[i] = abs(input % 2); //如果input是负数则每次存到result中的数都为负数,所以这里加了绝对值。
input /= 2;
i++;
}
return --i;
}
3.通过位操作直接获取二进制,推荐这个,运行效率高
#include"stdio.h"
#include"stdlib.h"
int DecimalToBinary(int input,int *result);
int main(void)
{
int input;
int result[32]={0};
printf("INPUT:");
scanf("%d",&input);
DecimalToBinary(input,result);
for(int i = 0; i < 32; i++)
printf("%d",result[i]);
printf("\n");
exit(0);
}
/* 十进制转二进制函数
* @input :要处理的数
* @result :转换结果存储地址
* 注:(负数的转换结果为:绝对值转二进制取反加1,显示位数为32位,每一位均以int型存储到地址)
* */
int DecimalToBinary(int input,int *result)
{
int time,i;
time = 31;
i = 0;
while(time >= 0)
{
result[i] = input >> time & 1;
time--;
i++;
}
return 0;
}