查看十六进制数的特定位?

View a specific bit of a hex number?

我正在研究一种逻辑,它会教我位操作和位操作是如何工作的,我正在尝试查看给定十六进制数的特定位。例如 f0f0 具有以下位值 1111000011110000。假设我正在尝试查看第 i^th 位,假设我选择第 4 个位置,我的逻辑应该 return 1. 我尝试通过做这个逻辑:

unsigned int desiredBit = hex & (1 << decimal);
      printf("%x\n", desiredBit);

这似乎在位为 0 的任何时候都有效,但只要位为 1,它就会吐出 10 的倍数。我认为做 << 只会把我带到那个位置,但我我猜我错了。关于如何修复我的逻辑的任何指导?

你得到的实际上是 2 的倍数,即这个特定位的 "weight" 如果它被设置,否则为 0。如果您只是想知道它是否已设置,请检查此权重是否为 != 0 或不是:

尝试

unsigned int setOrNot = (hex & (1 << decimal)) != 0;

你得到的数字的数值只有那个位设置,这不完全是 1 除非它是 LSB。

例如,对于数字 0b11100101,如果您屏蔽掉第二个 MSB (0b11100101 & 0b01000000),则结果为 0b01000000,即以 10 为基数的 64。

如果您希望结果为 10,您可以对整个操作执行 !!,即 printf("%d\n", !!(num1 & num2)); 将始终为 1 如果该位已设置或 0 如果未设置。