ビット演算による2の補数(反転と1加算)

正解は「カ」です。 8ビットの符号なし加算において、値 $$x$$ に加算した結果が $$00000000$$(桁あふれを無視した結果がゼロ)になる値とは、コンピュータにおける「2の補数(負の表現)」のことです。 2の補数の定義: 任意の2進数に対する2の補数は、**全ビットを反転(1の補数を算出)させた上で、最下位ビットに 1(00000001)を加算する**ことで得られます。 プログラムの2行目で `y ← y + 00000001` が行われているため、空欄 `  a  ` では「$$x$$ の全ビット反転(NOT演算)」を行う必要があります。 排他的論理和(XOR、記号 $$\nabla$$)の性質として、任意のビット $$b$$ と $$1$$ のXORをとると、 ・$$0 \nabla 1 = 1$$ ・$$1 \nabla 1 = 0$$ となり、必ずビットが反転します。したがって、全ビットが1である `11111111` との間で排他的論理和をとる `x ▽ 11111111`(選択肢カ)により、$$x$$ のすべてのビットを反転させることができます。 $$x$$ と `01111111` のAND(論理積)をとると、最上位ビットが強制的に0になり、他のビットはそのまま維持されるため反転になりません。 $$x$$ と `11111111` のANDをとっても、元の値 $$x$$ そのままとなり反転されません。 $$x$$ と `01111111` のOR(論理和)をとると、下位7ビットが強制的に1になってしまいます。 $$x$$ と `11111111` のORをとると、全ビットが強制的に1になってしまいます。 `x ▽ 01111111` では、下位7ビットのみが反転し、最上位ビットが反転されないため誤りです。

次のプログラム中の  a  に入れる正しい答えを,解答群の中から選べ。

関数complement は,引数として渡された8 ビット型の値x について,x に加算すると00000000 になる値を返す。8 ビット型の加算は,値を符号なし2 進数とみなしたときの加算とし,桁あふれが発生したときのあふれた桁は無視する。演算子∧,∨,▽は,それぞれビット単位の論理積,論理和,排他的論理和を表す。

〔プログラム〕

○8ビット型: complement(8ビット型: x)
  8ビット型: y
  y ← [ a ]
  y ← y + 00000001
  return y
出典令和8年度 基本情報技術者試験 科目B 問2
ア
x ∧ 01111111
イ
x ∧ 11111111
ウ
x ∨ 01111111
エ
x ∨ 11111111
オ
x ▽ 01111111
カ
x ▽ 11111111