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