1

メモリ アドレス 0x3803 の 3 番目のビット (0x4) を設定し、7 番目のビット (0x40) をクリアする C コードを書くとしますが、"&" と"|" 操作を完了するには:

*((char *) 0x3803) = *((char *) 0x3803) | 0x4;
*((char *) 0x3803) = *((char *) 0x3803) & 0x3F; 

自分の価値観が正しいか、これらの価値観に代わるものがある可能性があることを保証したいだけです

4

3 に答える 3

1

ビットをクリアするにANDは、補数値、つまり の反転を使用する必要があります。0x40これは0xBFです。を使用して、コンパイラに値を計算させることができます~

&=そのためにandを使用できることに注意してください|=

*((char *) 0x3803) |= 0x04;
*((char *) 0x3803) &= ~0x40;
于 2013-08-31T09:21:46.297 に答える
1

これを私が書く方法は次のとおりです。

*((char *) 0x3803) = *((char *) 0x3803) | 0x4;  // Unchanged from what you already had
*((char *) 0x3803) = *((char *) 0x3803) & ~0x40;

特定のビットをクリアするには、ビットごとの否定とビットごとの否定を使用して、実証した問題を回避します。0x40 でマスクされたビットをクリアしたいことがわかっているので、ビットごとの否定によってすべてのビットが反転し、0xbf になります。ビット 0x40 をクリアするための正しい値は...

于 2013-08-31T09:22:44.350 に答える