使用Bitwise运算符十进制到二进制

时间:2018-04-14 09:18:58

标签: c bit-manipulation bitwise-operators

#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)。

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.

我们继续将结果打印到最后一位数。

希望这有助于您理解。