使用按位运算符将十进制转换为二进制

Gan*_*mpi 2 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;
}
Run Code Online (Sandbox Code Playgroud)

此代码采用十进制数并使用按位运算符将其转换为二进制数。我很难理解 for 循环内部的逻辑result = decimal_num >> c以及它为什么从for (c = 31; c >= 0; c--). 我了解按位 AND、OR、XOR 和 NOT 的基础知识,我知道当奇数与“1”进行 ANDED 时,结果为“1”,否则为“0”(因为所有赔率的最低有效位为 1)。

Gau*_*tam 6

这是代码的解释:

该程序从左扫描十进制数字写入,处理每一位。十进制数字应该有 32 位,因此 for 循环运行 32 次。

第一次,c 的值为 31。

假设decimal_num的位表示最初是x……………………( . 代表任何数字)

decimal_num >> 31 将所有位向右移动 31 次,这样第一位在最右端移动。结果是 0000000000000000000000000000x。请注意,当数字被移位时,0 被前置到左端。

然后检查结果以查看它是 0 还是 1,并相应地打印出来。0000000000000000000000000000x & 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000x000000000000000x00000000000000

继续,并在 c 为 30 时检查第二位。:

…………………………………………………………………………………………………………………………

decimal_num >> 30 结果为 000000000000000000000000000000.Y

000000000000000000000000000.Y & 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

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

希望这可以帮助您理解。