Я пишу эмулятор CHIP8. Я написал все до сих пор, за исключением кода операции DXYN
, я искал для него некоторое объяснение, и я нашел вопрос в SO, с кодом в качестве ответа для него. Читая код, я застрял на этом фрагменте кода, который в C говорит if((data & (0x80 >> x)) != 0)
Что делает (data & (0x80 >> x))
?Понимание фрагмента кода в эмуляторе CHIP8
0
A
ответ
2
Если разбить его, мы имеем
0x80 >> x
который сдвигает значение 128
(0x80
) право на x
бит.
Следующая часть использует предыдущий результат в качестве маски для data
, чтобы узнать, установлен ли конкретный бит в data
.
Затем все проверяется на нуль, чтобы узнать, установлен ли бит или нет.
3
Оператор if
проверяет, установлен ли бит #x в байте, считая 0 как старший бит.
Bit#
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)
это другими словами, верно при х = 1, х = 4 и х = 6