0

我正在写一个 CHIP8 模拟器。到目前为止,我写了所有东西,除了 opcode DXYN,我为它寻找了一些解释,我在 SO 中找到了一个问题,其中有一个代码作为答案。在阅读代码时,我卡在了这段代码上,它用 C 语言说明if((data & (0x80 >> x)) != 0)了它到底(data & (0x80 >> x))做了什么?

4

2 回答 2

3

if语句检查位 #x 是否设置在一个字节中,将 0 计为最高位。

Bit#  01234567
      01001010   (0x4A has bit 1, 4 and 6 set)

(data & (0x80 >> x)) returns 0x40 for x=1
                             0x08 for x=4
                             0x02 for x=6
                             0x00 for all other values.

if((data & (0x80 >> x)) != 0)换句话说,对于 x=1、x=4 和 x=6 为真

于 2013-07-10T11:02:10.520 回答
2

如果我们拆分它,我们有

0x80 >> x

它将值128( 0x80) 右移x一位。

下一部分使用前面的结果作为 的掩码data,查看它设置的特定位data

然后根据零检查整体以查看该位是否已设置。

于 2013-07-10T10:59:45.940 回答