2013-07-10 3 views
0

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

ответ

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