8ビットの全ビット反転をどう見極める?
基本情報技術者試験 令和元年度秋期 午前 問2 / 基礎理論 › 離散数学
過去問にチャレンジ
8ビットの値の全ビットを反転する操作はどれか。
- ア
16進表記 00 のビット列と排他的論理和をとる。
- イ
16進表記 00 のビット列と論理和をとる。
- ウ
16進表記 FF のビット列と排他的論理和をとる。
- エ
16進表記 FF のビット列と論理和をとる。
会話形式の解説
講師全ビットを反転するには、元が0なら1、元が1なら0になる必要があります。各演算を両方の場合で確かめましょう。
受験者00との排他的論理和では、相手のビットはすべて0です。これで値は変わりますか。
講師排他的論理和は、二つのビットが異なるときに1になります。0と組み合わせると、元が0なら0、1なら1のままです。
受験者00との論理和も、元の値のままになりそうです。
講師そのとおりです。論理和は、どちらかが1なら結果が1です。相手が0なら、元が0でも1でも値は変わりません。
受験者FFは全ビットが1ですね。論理和をとると、元の値にかかわらず全部1になりますか。
講師はい。元が1のビットは1のままなので、全ビットの反転にはなりません。
受験者では、FFとの排他的論理和なら、元が0のビットは1になりそうです。元が1の場合はどうですか。
講師1と1は同じなので、排他的論理和の結果は0です。0は1に、1は0になるため、FFとの排他的論理和が正解です。
受験者00との演算は値が変わらず、FFとの論理和は全部1になります。反転になるかは、元が0と1の両方で確かめればよいのですね。
講師はい。ビット演算では、対応するビット同士を比べ、0の場合と1の場合の結果を確認すると判断できます。
まとめ
全ビットの反転では、元が0なら1、元が1なら0になる必要があります。FFは8ビットすべてが1なので、FFとの排他的論理和がこの条件を満たします。00との排他的論理和・論理和は元の値を変えず、FFとの論理和は結果をすべて1にします。
解答・解説
正解はウです
この問題のテーマ
8ビットの値について、各ビットの0と1を入れ替える演算を選ぶ問題です。
解き方の考え方
全ビットを反転するには、元のビットが0でも1でも、演算後に反対の値になる必要があります。各選択肢の演算を、元のビットが0の場合と1の場合の両方で確かめます。
選択肢ごとの解説
- ×ア 16進表記 00 のビット列と排他的論理和をとる。00との排他的論理和では、各ビットを0と比較します。元のビットが0でも1でも値は変わらないため、反転できません。
- ×イ 16進表記 00 のビット列と論理和をとる。00との論理和では、相手の各ビットが0です。演算後も元の値のままなので、全ビットの反転にはなりません。
- ○ウ 16進表記 FF のビット列と排他的論理和をとる。FFは8ビットすべてが1の値です。これと排他的論理和をとると、元の0は1に、元の1は0になり、全ビットが反転します。
- ×エ 16進表記 FF のビット列と論理和をとる。FFとの論理和では、相手の各ビットが1です。結果は元の値にかかわらずすべて1となり、元が1だったビットは反転しません。
POINT
- ビット演算は、対応するビット同士で結果を確かめます。
- 排他的論理和は、二つのビットが異なるときに1になります。
- 論理和は、二つのビットの少なくとも一方が1なら1になります。
