この概念が出た関連問題

この試験の対策ガイド

基本情報技術者試験 対策ガイド

合格率・勉強法・参考書の選び方をまとめています

見る →
答えと解説を見る(先に解くのがおすすめ)

正解は ウ

解説

ビット操作の基本問題です。全ビットを反転(0を1に、1を0に)する操作は、すべてのビットが1であるビット列(8ビットなら16進表記 FF=2進表記 11111111)との排他的論理和(XOR)で実現できます。XOR は「2つの入力が異なるとき1、同じとき0」を返す演算なので、x XOR 1 は x の反転(x が0なら1、1なら0)、x XOR 0 は x のまま、という性質があります。したがって FF(全ビット1)と XOR をとると全ビットが反転します。例えば 10110010 XOR 11111111 = 01001101 となり、確かにすべてのビットが反転しています。この性質は誤り検出やビットマスク処理、暗号処理などで頻繁に使われる基本テクニックです。一方、論理和(OR)は「どちらかが1なら1」なので、FF と OR をとると結果は常に FF(全ビット1)になってしまい、反転にはなりません。ウが正解です。

なぜ他の選択肢は違うのか

選択肢 ア
16進表記 00(全ビット0)との排他的論理和では、x XOR 0 = x という性質により元の値がそのまま保たれ、何も変化しません。XOR で反転を起こせるのは相手側のビットが1のときだけです。「XOR を使う」という方向性は正しいのですが、相手が全ビット0では反転は一切起こらないため、反転させたい桁すべてに1を立てた FF を相手にする必要があります。
選択肢 イ
16進表記 00(全ビット0)との論理和では、x OR 0 = x という性質により元の値がそのまま保たれます。OR は「どちらかが1なら1」を返す演算なので、全ビット0との OR では相手の値がそのまま残るだけで、0→1 の変化も 1→0 の変化も起こりません。演算(OR)と相手の値(00)の両方が反転には不適切な組合せです。
選択肢 エ
16進表記 FF(全ビット1)との論理和をとると、OR の性質(どちらかが1なら1)により、元の値にかかわらず結果は常に 11111111(FF)になります。これは「反転」ではなく「全ビットを1にセットする」操作です。1だったビットが0に変わることが決してないため反転の要件を満たしません。FF を相手にする点は正解と同じでも、演算が OR では目的を達成できません。

解くときのポイント

ビット操作の定石: 反転は XOR FF、クリアは AND 00、セットは OR FF、特定ビット取り出しは AND マスク。XOR の「1と組むと反転、0と組むとそのまま」を覚えること。