Понимание куска кода в эмуляторе CHIP8

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

0

Решение

Если мы разделим это, у нас есть

0x80 >> x

что меняет значение 128 (0x80) прямо x биты.

Следующая часть использует предыдущий результат в качестве маски для data, чтобы увидеть, установлен ли определенный бит в data,

Затем целое проверяется против нуля, чтобы увидеть, установлен бит или нет.

2

Другие решения

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

3

По вопросам рекламы [email protected]