如何把一个整数转换成二进制

下面介绍一种把键盘输入的整数转换成二进制的方法:程序如下:

#include <stdio.h>

void int2bin1(int num)
{
    int i;
    
    for(i = 1; i < 33; i++)
    {
       if((unsigned int)(num & 0x80000000) == (unsigned int)(0x80000000))
       {
           printf("1");
       }
       else
       {
           printf("0");
       }
       
       num = num << 1; 
       
       if(i % 4 ==0)
       {
       	   printf(" ");
	   }
    }
}

int main()
{
    int num;
    
    printf("Please input number:\n");
    scanf("%d",&num);

    int2bin1(num);
    
    return 0;
}

首先我们在主函数中由键盘输入一个整数 num, 然后我们把整数 num的值传递给 int2bin函数(函数作用是把整数转化为二进制的形式输出)


在int2bin 函数中主要起作用的是if((unsigned int)(num & 0x80000000) == (unsigned int)(0x80000000))

这个语句,是在把十六进制表示的0x80000000和传递过来的num 的值进行位运算 &;

以输入的num = 5 来举例;

因为数字保存在计算机中都是补码表示,而正数的补码就是源码,所以5在计算机中保存的二进制形式为

0000  0000  0000  0000  0000  0000  0000  0101(32位)

上述语句将它和 0x80000000 进行位&运算:0x80000000在计算机中的二进制保存形式为:

1000  0000  0000  0000  0000  0000 0000 0000;

如果此时num的二进制第一位为 1 时,1xxxx(32位,x不管为1或者0)& 0x80000000 都= 0x80000000;

否则第一位为 0 时不管后面为什么都不等于0x80000000;

借由这个特性可以判断此时二进制的第一位是1 还是 0;

再下来就是num = num <<1 语句了,这是在把num的二进制左移一位,此时原来二进制的第二位就变为第一位了,再和0x800000000判断;

通过for(I = 1; I < 33; I++)这个循环将二进制左移32次,使每一位都可以和0x80000000进行比较判定。这样依次输出就是num的二进制表示;

为了美观,我们判断( I% 4 ==0)输出一个空格,就是输出四位bit位空一格;

如果还想对得到的二进制进行更多操作,可以在原来printf("1"),后面再加一个语句比如是 p[I] =1;来把每一位保存进一个数组;方便操作;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值