FE EXAM

符号付き整数の表現範囲(ビット数で決まる上限と下限)

4 / 8 / 16 / 32 ビットそれぞれで、2の補数表現の符号付き整数が表せる範囲を数直線で比較します。負の側が1つ多いという特徴も確かめましょう。

INTERACTIVE VISUALIZATION
負の範囲
正の範囲
最小値(最も小さい負)
-128
-2^7
最大値(最も大きい正)
127
2^7 - 1
値の総数
256
2^8
符号なしなら
0 〜 255
ビット数
覚えておきたい数字
4 bit: 16通り
8 bit: 256通り(1バイト)
16 bit: 65,536通り
32 bit: 約42億通り
ビット数を切り替えてみてください。表現できる範囲が2倍ずつ広がることが分かります。0 を中心とした左右対称ではなく、負の側が1つ多い(min と max の絶対値が異なる)ことに注目してください。
-6464-1280127負(128個)正(127個)8 ビットの符号付き整数の表現範囲範囲 = -2^(8-1) 〜 2^(8-1) - 1 = -128127128128個 (0も含む)
すべてのビット数を比較
ビット数最小値最大値値の総数符号なし最大値
4 bit-871615
8 bit-128127256255
16 bit-32,76832,76765,53665,535
32 bit-2,147,483,6482,147,483,6474,294,967,2964,294,967,295
解説

📌
符号付き整数の表現範囲とは

8ビットの場合-1280127128個の負128個の正(0含む)

符号付き整数の表現範囲とは、決められたビット数で表せる負の数を含む整数の範囲のことです。コンピュータでは2の補数表現を使うため、範囲には特徴的なパターンがあります。

公式はとてもシンプルです。
・最小値: -2^(n-1)
・最大値: 2^(n-1) - 1
・値の総数: 2^n(負・0・正をすべて含む)

たとえば8ビットでは、-128 〜 +127 の256通りを表せます。0 を中心に左右対称ではなく、負の側が1つ多いのがポイントです。これは2の補数の都合で、後のカードで詳しく説明します。

📌
ビット数と範囲の関係

ビット数を1つ増やすたびに、表せる値の総数が2倍になります。範囲は左右両側に等しく広がるので、ビット数を倍にすると見える世界の大きさはとても急速に伸びていきます。

ビット数最小値最大値値の総数主な用途
4 bit-871616進数1桁、教材用
8 bit-1281272561バイト、文字コード、画素値
16 bit-32,76832,76765,536音声サンプル、short型
32 bit-2,147,483,6482,147,483,647約42億int型、Unix時刻(2038年問題)

代表的な2の冪は次のとおりです。
2⁷ = 128, 2⁸ = 256, 2¹⁵ = 32,768, 2¹⁶ = 65,536
2³¹ = 約21億, 2³² = 約42億(メモリ容量・int型の範囲計算で使う)

📌
範囲の内訳と計算

8ビットの内訳256通り = 2⁸負: -128 〜 -1(128個)0正: 1 〜 127(127個)128 + 1 + 127 = 256 通り0を「正の側」に含めるので、負の最大絶対値が1つ多い

覚えておきたい関係:
・nビットで表せる符号付き整数の最小値は -2^(n-1)、最大値は 2^(n-1) - 1
・ビット数を1つ増やすと、表現範囲は2倍になる
・Unix時刻が2038年で問題になるのは、32ビットint型の上限 2,147,483,647 に到達するため

「負の側が1つ多い」のはなぜ? ビット列のパターンは全部で 2^n 通りあります。そのうちの1つは「0」を表すために使われるため、残りの 2^n - 1 個を負と正に分けます。0 を「正側」に分類するルールにすると、負の側だけが「0を含まない」ので、絶対値の最大が1だけ大きくなるのです。

この性質から、「最小値の符号を反転しようとすると、最大値を超えてしまう」という小さなトラップがあります。8ビットでは -(-128) = 128 ですが、127 が最大なので、結果がオーバーフローを起こします。これはプログラミングで引っかかりやすいポイントです。

関連コンテンツ

符号付き整数の表現範囲 | Vizigo