关于补码的显示

来源:百度知道 编辑:UC知道 时间:2024/06/16 19:15:54
下面这段代码是用来显示补码的,mask/=2; 这个语句的作用是什么?最好详细一点,谢谢。
#include"stdio.h"
int main( )
{
long num=-38472;//你要的数字
unsigned int mask=0xC0000000;
int count=31;
while(mask!=0)
{
printf("%d",(num&mask)>>count);
mask/=2;
count--;
}
return 0;
}

不就是显示 2进制的数值吗。
num = -38472
在机器里放的是 0xffff69b8
这个程序的输出是
11111111111111110110100110111000
F F F F 6 9 B 8

mask/=2是将mask的数值除以2,实际就是右移一位。
这里的mask虽然是C0000000 但是如果是80000000
也是完全一样的结果。只要最高位是1 就行。
因为 (num&mask)>>count
第一次 让num 和C0000000 与操作,再右移31位。
那么num的第31位为0 就输出0, 第31位为1 就输出1
(0位到31位共32个)
下一次mask右移一位,变成60000000 但是count也减少了1.
那么num的第30位为0 就输出0, 第30位为1 就输出1

如此这般循环,直到32个0或1输出完毕。

mask/=2;等同于mask=mask/2