0

CHIP8エミュレーターを書いています。opcode を除いて、これまでのところすべてを書きました。そのDXYN説明を探したところ、SO で質問が見つかり、コードが答えとしてありました。if((data & (0x80 >> x)) != 0)コードを読んでいるときに、Cで正確に何をするかを言っているこのコードに行き詰まりました(data & (0x80 >> x))か?

4

2 に答える 2

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.

if((data & (0x80 >> x)) != 0)言い換えると、x=1、x=4、x=6 について真です。

于 2013-07-10T11:02:10.520 に答える
2

それを分割すると、

0x80 >> x

128( ) をビット単位で0x80右にシフトします。x

次の部分では、前の結果を のマスクとして使用してdata、特定のビットが に設定されているかどうかを確認しdataます。

次に、全体がゼロに対してチェックされ、ビットが設定されているかどうかが確認されます。

于 2013-07-10T10:59:45.940 に答える