理解CHIP8仿真器中的一段代码

时间:2013-07-10 10:55:57

标签: c++ emulation bit-shift opcode

我正在写一个CHIP8模拟器。到目前为止我写了所有内容,除了操作码DXYN之外,我找了一些解释,我在SO中找到了一个问题,代码作为答案。在阅读代码时,我遇到了这段代码,在C中说if((data & (0x80 >> x)) != 0) (data & (0x80 >> x))究竟做了什么?

2 个答案:

答案 0 :(得分: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.
换句话说,对于x = 1,x = 4和x = 6

if((data & (0x80 >> x)) != 0)为真

答案 1 :(得分:2)

如果我们将其分开,我们有

0x80 >> x

将值1280x80)右移x位。

下一部分将前一个结果用作data的掩码,以查看它在data中设置的具体位。

然后检查整数是否为零以查看该位是否已设置。