メモリ アドレス 0x3803 の 3 番目のビット (0x4) を設定し、7 番目のビット (0x40) をクリアする C コードを書くとしますが、"&" と"|" 操作を完了するには:
*((char *) 0x3803) = *((char *) 0x3803) | 0x4;
*((char *) 0x3803) = *((char *) 0x3803) & 0x3F;
自分の価値観が正しいか、これらの価値観に代わるものがある可能性があることを保証したいだけです
メモリ アドレス 0x3803 の 3 番目のビット (0x4) を設定し、7 番目のビット (0x40) をクリアする C コードを書くとしますが、"&" と"|" 操作を完了するには:
*((char *) 0x3803) = *((char *) 0x3803) | 0x4;
*((char *) 0x3803) = *((char *) 0x3803) & 0x3F;
自分の価値観が正しいか、これらの価値観に代わるものがある可能性があることを保証したいだけです
ビットをクリアするにAND
は、補数値、つまり の反転を使用する必要があります。0x40
これは0xBF
です。を使用して、コンパイラに値を計算させることができます~
。
&=
そのためにandを使用できることに注意してください|=
。
*((char *) 0x3803) |= 0x04;
*((char *) 0x3803) &= ~0x40;
これを私が書く方法は次のとおりです。
*((char *) 0x3803) = *((char *) 0x3803) | 0x4; // Unchanged from what you already had
*((char *) 0x3803) = *((char *) 0x3803) & ~0x40;
特定のビットをクリアするには、ビットごとの否定とビットごとの否定を使用して、実証した問題を回避します。0x40 でマスクされたビットをクリアしたいことがわかっているので、ビットごとの否定によってすべてのビットが反転し、0xbf になります。ビット 0x40 をクリアするための正しい値は...