我正在写一个CHIP8模拟器。到目前为止我写了所有内容,除了操作码DXYN
之外,我找了一些解释,我在SO中找到了一个问题,代码作为答案。在阅读代码时,我遇到了这段代码,在C中说if((data & (0x80 >> x)) != 0)
(data & (0x80 >> x))
究竟做了什么?
答案 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
将值128
(0x80
)右移x
位。
下一部分将前一个结果用作data
的掩码,以查看它在data
中设置的具体位。
然后检查整数是否为零以查看该位是否已设置。