十进制转换成2进制
转换规则
十进制整数转换为 N 进制整数采用“除 N 取余,逆序排列”法。具体做法是:
- 将 N 作为除数,用十进制整数除以 N,可以得到一个商和余数;
- 保留余数,用商继续除以 N,又得到一个新的商和余数;
- 仍然保留余数,用商继续除以 N,还会得到一个新的商和余数;
- ……
- 如此反复进行,每次都保留余数,用商接着除以 N,直到商为 0 时为止。
把先得到的余数作为 N 进制数的低位数字,后得到的余数作为 N 进制数的高位数字,依次排列起来,就得到了 N 进制数字。
而十进制想要转为二进制,就是采用“除 2 取余,逆序排列”原则了:
将该数字不断除以2直到商为零,然后将余数由下至上依次写出,即可得到该数字的二进制表示。
示意图

代码实现
D2B.c:
#include <stdio.h>
int print_D2B(unsigned int num)
{
if(num<0){
printf("please input a num >=0\n");
return -1;
}
int len = sizeof(int)*8;
unsigned char arr[len];
int temp,i=0,j=0;
for(j=0;j<len;j++){
arr[j]=0;
}
printf("\n %u 的二进制形式为:\n",num);
do{
temp=num%2;
num=num/2;
arr[i++]=temp;
}while(num!=0);
for(j=len-1;j>=0;j--){
printf("%d",arr[j]);
if(j>=8 && j%8==0)
printf("|");
}
printf("\n");
return 0;
}
test.c:
#include <stdio.h>
#include "d2b.h"
int main(int argc,char *argv[])
{
int ret;
int num=0;
printf("请输入一个正整数:\n");
scanf("%d", &num);
ret=print_D2B(num);
return 0;
}
结果:
请输入一个正整数: 42 42 的二进制形式为: 00000000|00000000|00000000|00101010
浙公网安备 33010602011771号