基本情報技術者試験のサンプル問題を解こう!(1)「(科目A)2の補数表現」

スポンサーリンク
IT系

基本情報技術者試験のサンプル問題(科目A)を解いてみよう。

問1 負数を2 の補数で表すとき,8 ビットの2 進正数n に対し-n を求める式はどれか。
ここで,+は加算を表し,OR はビットごとの論理和,XOR はビットごとの排他的論理和を表す。
ア (n OR 10000000) + 00000001
イ (n OR 11111110) + 11111111
ウ (n XOR 10000000) + 11111111
エ (n XOR 11111111) + 00000001

正解:エ

【前提】2の補数とは?

コンピュータは負の数を「2の補数(two’s complement)」で表す。
8ビットの正の整数 n に対して、-n を求めるには以下の操作を行う。

n をビット反転(1の補数)して 1 を加える

つまり、

-n = (NOT n) + 1
この「NOT n」は、n の各ビットを反転する、つまり 0 ⇔ 1 を入れ替える操作である。
これはビットごとの XOR 11111111 と同じ意味になる。

選択肢を検討していこう

  (n OR 10000000) + 00000001
  OR すると上位ビットを1にするだけで、正しいビット反転にならない → ❌

 (n OR 11111110) + 11111111
  OR すると すべて1となり、全く別の数になる → ❌

  (n XOR 10000000) + 11111111
 10000000 との XOR では1ビットしか反転されない → ❌

  (n XOR 11111111) + 00000001
  これはビット反転(1の補数)して1を足す操作(2の補数)
 ✅ 正解!

🧪 例で確認してみよう

たとえば、n = 00000101(= 5)とすると、

  1. NOT n = 11111010
  2. +1 → 11111011(これが -5 の 2の補数)

n XOR 11111111 → 11111010(ビット反転)
+ 00000001 → 11111011(完成)

補足:XOR 11111111 = ビット反転

  • 例) n = 01010101
  • n XOR 11111111 = 10101010

これは「1の補数」と同じである。そこに +1 すれば「2の補数」が完成する。

コメント

タイトルとURLをコピーしました