C言語の基礎
uint8_t r = 0x5A;
r |= 0x01;
r &= ~0x10;
r ^= 0x0F;
printf("0x%02X\n", r);uint8_t は8ビットの符号なし整数型である。上のコードを実行したときの出力として、正しいものはどれか。
- A0x44
- B0x4F
- C0x54
答えと解説を見る
正解:A. 0x44
0x5A は2進数で 0101 1010 です。|= 0x01 でビット0を1にして 0101 1011(0x5B)、&= ~0x10 でビット4を0にして 0100 1011(0x4B)になります。最後の ^= 0x0F は下位4ビットを反転するので、0100 0100、つまり 0x44 になります。| はビットを1にする、& と ~ の組み合わせはビットを0にする、^ はビットを反転する、という使い分けです。
- A. 正しい。0x5A → 0x5B → 0x4B → 0x44 と変わります。
- B. 最後の ^= を |= と取り違え、下位4ビットを1にした場合の値です(0x4B | 0x0F = 0x4F)。
- C. &= ~0x10 を行わず、ビット4を0にしなかった場合の値です(0x5B ^ 0x0F = 0x54)。