下面介绍一种把键盘输入的整数转换成二进制的方法:程序如下:
#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;来把每一位保存进一个数组;方便操作;