十进制转换成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

 

posted @ 2023-10-23 11:41  皓然123  阅读(236)  评论(0)    收藏  举报