C言語の基礎

uint8_t r = 0x5A;
r |= 0x01;
r &= ~0x10;
r ^= 0x0F;
printf("0x%02X\n", r);

uint8_t は8ビットの符号なし整数型である。上のコードを実行したときの出力として、正しいものはどれか。

  1. A0x44
  2. B0x4F
  3. 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)。
この分野を解く 分野ページへ

C言語の基礎の参考書を探す PR

Amazonの検索結果へのリンクです。Amazonのアソシエイトとして、半導体教室は適格販売により収入を得ています。

C言語の基礎のほかの問題

  1. uint8_t は8ビットの符号なし整数型である。x を10回増やす上のコードを実行したときの出力として、正しいものはどれか。
  2. unsigned char は8ビット、int は32ビットとする。上のコードを実行したときの出力として、正しいものはどれか。
  3. uint8_t は8ビットの符号なし整数型、int は32ビットとする。上のコードを実行したときの結果として、正しいものはどれか。
  4. int と unsigned int は32ビットとする。上のコードを実行したときの結果として、正しいものはどれか。
  5. unsigned int は32ビットとする。上のコードを実行したときの動作として、正しいものはどれか。