AP科目Aの核心1:2進数・2の補数・ビット演算

応用情報技術者試験の科目Aに必要な基数変換、2の補数、オーバフロー、ビットマスク、シフトを、公式過去問とオリジナル診断問題で学びます。

応用情報技術者試験科目A2進数2の補数

AP科目A・第1回 · 2026年度・シラバスVer.7.2に基づく独立した学習資料です。IPAとの提携はなく、合格を保証しません。 シリーズ一覧を見る

この単元では、ビット列を見てすぐに値を決め付けない習慣から始める。基数変換、2の補数、オーバフロー、マスク、シフトを一つの体系として理解すれば、表現を変えた問題にも対応できる。2026年試験の名称は科目Aであり、後掲の公式過去問は出題当時の区分である午前として示す。科目Aだけに合格しても、AP試験全体の合格にはならない。

学習目標

  • ビット幅、符号の有無、数学的な値、格納されたビットパターンを区別する。
  • 2進数・16進数・2進小数を変換し、表現範囲を求める。
  • 2の補数で負数を作り、元の値を確認する。
  • キャリーと符号付きオーバフローを区別する。
  • AND・OR・XOR・NOTのマスクと、論理・算術シフトを正しく適用する。

最初のルール:三つを先に確認する

計算の前に、次を確認する。

  1. ビット幅は何ビットか。
  2. 符号付きか、符号なしか。
  3. 対象は数学的な値か、格納されたビットパターンか。

例えば、同じ8ビットの 11110000 でも、符号なし整数なら 128+64+32+16=240 である。符号付き2の補数整数なら 240-256=-16 である。文脈のないビット列だけでは値は決まらない。

2進数、16進数、小数

各桁の重みを足せばよい。

  • 00101101₂ = 32+8+4+1 = 45
  • 4ビットずつ区切ると 1010 1101₂ = AD₁₆ である。1010₂=A₁₆、1101₂=D₁₆ となる。
  • 小数点以下の重みは 2^-1, 2^-2, 2^-3, ... なので、0.101₂ = 1/2+1/8 = 0.625 である。
  • 10.101₂ = 2+1/2+1/8 = 2.625 である。

10進数の有限小数が、2進数でも有限になるとは限らない。例えば10進数の 0.1 は2進数では循環するため、限られたビット数に格納すると近似値になる。

表現範囲と2の補数

nビットの範囲は次のとおりである。

  • 符号なし:0..2^n-1
  • 2の補数:-2^(n-1)..2^(n-1)-1

したがって、符号付き8ビットの範囲は -128..127 である。正の側が一つ少ないため、-128 の符号を反転した +128 は同じ8ビット形式では表現できない。

-13の作り方

8ビットの +13 から始める。

00001101   (+13)
11110010   (全ビットを反転)
11110011   (+1 → -13)

逆に確認するには、11110011 を符号なしの243として読み、243-256=-13 と計算する。反転だけの 11110010 は242なので、242-256=-14 である。つまり、反転後に1を加える必要がある。

キャリーと符号付きオーバフローは別物

キャリーは固定ビット幅の外に出たビットであり、符号付きオーバフローは真の計算結果が符号付きの表現範囲を外れた状態である。

  • 8ビットで 127+1 は 01111111+00000001 = 10000000 となる。格納パターンを符号付きで読むと -128 なので、符号付きオーバフローである。
  • -1+1 は 11111111+00000001 = 1 00000000 となる。格納される8ビットは 00000000、すなわち0である。キャリーはあるが、符号付きオーバフローはない。

2の補数の加算では、同符号の二つの入力から反対符号の結果が出たときに符号付きオーバフローとなる。異符号同士の加算では、和が二つのオペランドの間に収まるため、符号付きオーバフローは起こらない。

ビットマスク

マスクは、対象のビットを残す、立てる、反転するためのパターンである。10110110 の下位4ビットに適用すると次のようになる。

10110110 AND 00001111 = 00000110   # 下位4ビットだけを残す
10110110 OR  00001111 = 10111111   # 下位4ビットを1にする
10110110 XOR 00001111 = 10111001   # 下位4ビットを反転する

NOTは全ビットを反転するので、ビット幅を明示しなければならない。例えば、8ビットの NOT 00001101 は 11110010 だが、16ビットなら 1111111111110010 である。

論理シフトと算術シフト

右シフトでは、空いた桁に何を入れるかを区別する。

  • 8ビット 11110000 を2ビット論理右シフト:00111100 = 60
  • 同じパターンを符号付き8ビットとして2ビット算術右シフト:11111100 = -4

ここでの算術右シフトは、2の補数表現で最上位の符号ビットを複製するものと仮定している。負数の算術右シフトと整数除算は、言語の規則や丸め方向によって結果が異なることがあるため、問題文や言語仕様を確認する必要がある。

左シフトも、無条件に「2倍」と覚えるのは危険である。通常の固定幅のビットパターン全体の左シフトでは、外に出た上位ビットを捨て、右端に0を入れる。符号付き8ビットで50(00110010)を1ビット左シフトすると、表現可能な100(01100100)になる。しかし100(01100100)を1ビット左シフトすると 11001000 となり、符号付き8ビットでは 200-256=-56 と読まれる。数学的な値200が範囲外だからである。

日本の試験問題では、算術左シフト を、符号ビットを保存し、残りのビットだけを左に移動する問題固有の演算として定義する場合がある。これをビットパターン全体のシフトやプログラミング言語の左シフトと同じだと決め付けてはいけない。必ずその問題の定義に従う。

公式過去問で確認する

次はIPAが公開している原文の文字と記号を、Markdownで読みやすい形に整えたものである。2021年度秋期の応用情報技術者試験で、当時の午前区分に出題された。

演算レジスタが16ビットのCPUで符号付き16ビット整数 x1,x2 を16ビット符号付き加算(x1+x2)するときに,全ての x1,x2 の組合せにおいて加算結果がオーバフローしないものはどれか。ここで,|x|は x の絶対値を表し,負数は2の補数で表すものとする。

ア |x1|+|x2|≦32,768 の場合

イ |x1|及び|x2|がともに32,767未満の場合

ウ x1×x2>0 の場合

エ x1 と x2 の符号が異なる場合

出典:令和3年度 秋期 応用情報技術者試験 午前 問8

正解:エ

  • ア:誤り。 32,767+1=32,768 は |x1|+|x2|≦32,768 を満たすが、符号付き16ビットの最大値32,767を超える。
  • イ:誤り。 32,766+32,766=65,532 は両方の絶対値が32,767未満だが、結果は範囲外である。
  • ウ:誤り。 積が正なら二数は同符号であり、まさにオーバフローが起こり得る条件である。例えば 20,000+20,000=40,000 は範囲外となる。
  • エ:正しい。 異符号の二数の和は二つのオペランドの間に収まる。各オペランドが -32,768..32,767 の範囲内なので、和も範囲を外れない。

オリジナル診断問題5問

以下は学習確認用のオリジナル問題であり、IPAの問題ではない。 先に解答を選び、その後で全ての選択肢を確認しよう。

1. 0.101₂の値はどれか。

ア 0.5 / イ 0.625 / ウ 0.75 / エ 1.25

正解:イ。 1/2+0/4+1/8=0.625 である。

  • ア:最後の 1、すなわち 1/8 を落とした値である。
  • イ:各桁の重みを正しく足した値である。
  • ウ:0.11₂ = 1/2+1/4 = 0.75 と取り違えた値である。
  • エ:小数点以下の桁の重みを誤って適用した値である。

2. -13の8ビット2の補数表現はどれか。

ア 00001101 / イ 11110010 / ウ 11110011 / エ 10001101

正解:ウ。 00001101 を反転して1を加えると 11110011 になる。

  • ア:+13 である。
  • イ:反転後の1を加えておらず、242-256=-14 である。
  • ウ:243-256=-13 となる正しいパターンである。
  • エ:符号絶対値表現との混同である。2の補数では 141-256=-115 となる。

3. 10110110の下位4ビットだけを残す演算はどれか。

ア AND 00001111 / イ OR 00001111 / ウ XOR 00001111 / エ AND 11110000

正解:ア。 上位4ビットを0にし、下位4ビットをそのまま残す。

  • ア:結果は 00000110 で、下位4ビットだけが残る。
  • イ:結果は 10111111 で、下位4ビットを全て1にする。
  • ウ:結果は 10111001 で、下位4ビットを反転する。
  • エ:結果は 10110000 で、逆に上位4ビットだけを残す。

4. 符号付き8ビットの 11110000 を2ビット算術右シフトした結果はどれか。

ア 00111100 / イ 11111100 / ウ 11000000 / エ 11111000

正解:イ。 符号ビット1を2回補うと 11111100 となり、値は-4である。

  • ア:0を補う2ビット論理右シフトの結果である。
  • イ:符号ビットを複製した正しい結果である。
  • ウ:8ビットのパターン全体を2ビット左シフトした結果である。
  • エ:1ビットだけ算術右シフトした結果である。

5. 符号付き8ビット加算でオーバフローするものはどれか。

ア -1+1 / イ 60+60 / ウ 100+40 / エ -64+(-64)

正解:ウ。 100+40=140 は最大値127を超える。格納パターンは 10001100 で、符号付きで読むと 140-256=-116 となる。

  • ア:結果0は範囲内である。キャリーはあるが、符号付きオーバフローはない。
  • イ:結果120は範囲内である。
  • ウ:数学的な結果140が範囲外なのでオーバフローする。
  • エ:結果-128は符号付き8ビットの最小値であり、表現できる。

よくある誤り

  • ビット幅と符号の有無を確認する前に値を決める。
  • 2の補数を作るとき、ビット反転だけで +1 を忘れる。
  • 最上位桁からキャリーが出れば、必ず符号付きオーバフローだと考える。
  • 右シフトで0を補うのか符号ビットを補うのかを確認しない。
  • 固定幅の左シフトを無条件に2倍だと判断する。
  • 問題で定義された 算術左シフト と言語のシフト規則を混同する。

要点と復習計画

ビット列の意味は、幅・符号・解釈方法で決まる。2の補数の負数は反転後に1を加えて作り、符号付きオーバフローはキャリーとは別に判定する。マスクではANDで保持、ORで設定、XORで反転し、シフトでは空きを補う規則と固定幅の範囲を併せて考える。

この内容は、当日 → 翌日 → 3日後 → 7日後に間隔を空けて復習しよう。これは本シリーズの公開頻度とは別の、個人の復習間隔である。AP科目Aシリーズのハブで全体の流れを確認できる。次のコア記事は論理と集合を扱うが、未公開のURLにはリンクしない。

公式資料

ブログへ