#include <stdio.h>
int main()
{
int decimal_num, c, result;
printf("Enter an integer in decimal number system\n");
scanf("%d", &decimal_num);
for (c = 31; c >= 0; c--)
{
result = decimal_num >> c;
if (result & 1)
printf("1");
else
printf("0");
}
printf("\n");
return 0;
}
此代码采用十进制数,并使用按位运算符将其转换为二进制数。我很难理解for循环result = decimal_num >> c
中的逻辑,为什么它会从for (c = 31; c >= 0; c--)
迭代。我理解按位AND,OR,XOR和NOT的基础知识,我知道当一个奇数与ANDED为'1'时,结果为'1',否则为'0'(因为所有赔率的最低有效位为1)。
答案 0 :(得分:2)
以下是对代码的解释:
程序扫描从左到左的十进制数字,对每个位进行处理。十进制数字应该有32位,因此for循环运行32次。
第一次,c的值是31。
假设decimal_num的位表示最初是 x ................................(。代表任何数字)
decimal_num&gt;&gt; 31将所有位向右移位31次,使得第一位在最右端移位。结果是0000000000000000000000000000x。请注意,当数字移位时,0会预先设置在左端。
然后检查结果以查看它是0还是1,并相应地打印。 0000000000000000000000000000x&amp;如果x为1,则00000000000000000000000000001 = 1 0000000000000000000000000000x&amp;如果x为零,则00000000000000000000000000001 = 0。
继续前进,并在c为30时检查第二位:
.Y ..............................
decimal_num&gt;&gt; 30结果 000000000000000000000000000000.Y
<00> 00000000000000000000000000000.Y&amp;如果Y为1,则00000000000000000000000000001 = 1 00000000000000000000000000000.Y&amp;如果Y为零,则00000000000000000000000000001 = 0.我们继续将结果打印到最后一位数。
希望这有助于您理解。