【図解】符号付き整数とは?基本情報(FE)にも出る「ビット数と表現範囲」の考え方

はじめに

10月の基本情報技術者試験(FE)に向けた「医療情報技師試験・過去問深掘りシリーズ」の第2弾です!

今回は、ITの基礎中の基礎でありながら、システムを作る上で絶対に避けては通れない「ビット数と表現できる数の範囲」に関する問題を取り上げます。

実際に出題された問題

【第24回 情報処理技術系 問2】

符号付き整数で、「-127〜127」を表現するには、最低何ビット必要か

  1. 6
  2. 7
  3. 8
  4. 9
  5. 10

正解は「3) 8」です。

1. まず、「-127〜127」の中に数字が何個あるか数える

  • マイナスの数(-1〜-127):127個
  • プラスの数(1〜127):127個
  • ゼロ(0):1個

これらを合計すると、127 + 127 + 1 = 255個。 つまり、このシステムでは「255種類の状態」を表現できる必要があります。

2. その数を表現できるビット数(箱の大きさ)を選ぶ ビット数が増えると、表現できるパターンは「2の掛け算」で増えていきます。

  • 7ビットの場合: 2を7回掛ける = 128パターン → 255個の数字を入れるには、箱が小さすぎて全然足りません。
  • 8ビットの場合: 2を8回掛ける = 256パターン → 255個の数字がすっぽり収まり、1パターン分だけ余裕があります!

だから、最低でも「8ビット」が必要になる、という答えに辿り着きます。

【図解】「符号付き」ってどういうこと?

コンピューターはデータを「0と1」のビットで管理します。

1ビットなら「0か1」の2通り。2ビットなら「00, 01, 10, 11」の4通り。

つまり、nビットあれば、2^n通りのデータを表現できます。

もし「8ビット」あったらどうなるでしょうか?

2^8 = 256 通りになります。

ここからがポイントです。この256通りの使い方には2つのパターンがあります。

  1. 符号なし整数(マイナスを考えない)0からスタートして、単純に正の数だけを数えます。表現範囲:0 〜 255 (合計256通り)
  2. 符号付き整数(マイナスも考える) ← ★今回の問題!256通りを「マイナスの世界」と「ゼロ・プラスの世界」で半分こします。一番上の桁(最上位ビット)を「プラスかマイナスかを示すサイン(符号)」として使うため、表現できる範囲が半分にズレます。表現範囲:-128 〜 127 (合計256通り)

問題文で求められているのは「-127〜127」を表現することなので、これをすっぽりカバーできる「8ビット(-128〜127)」が最低限必要だ、という答えに辿り着きます。(7ビットだと $2^7 = 128$ 通りで、-64〜63 までしか表現できず足りません!)

【実践】開発の現場ではどう役立つのか?

「こんなの試験用の知識でしょ?」と思うかもしれませんが、実は今後のシステム開発に直結する考え方です。

現在学習中のモダンJavaScriptでは、普段数字を扱うときによく使う Number 型は、自動的に大きなサイズ(64ビット)で処理されるため、あまりビット数を意識することはありません。

しかし、現場の課題を解決するための本格的なWebアプリを作っていく中で、大量のデータ(画像データや、センサーのバイタルデータなど)を高速に処理したい場面が出てきます。

そんな時、JavaScriptには Int8Array という「意図的に8ビットの符号付き整数だけを扱う配列」が用意されています。

JavaScript

// 8ビットの符号付き整数の配列を作る
const myData = new Int8Array(1);

myData[0] = 127;
console.log(myData[0]); // 結果: 127(正常!)

// 表現範囲(127)を超えた数値を入れてみると…?
myData[0] = 128;
console.log(myData[0]); // 結果: -128(オーバーフローして一周回ってしまう!)

このように、データの「器(ビット数)」の大きさを知らずに開発を進めると、システム上で予期せぬバグ(オーバーフロー)を引き起こす原因になります。

タスク管理・動線管理ツールのように、正確な時間やステータスをデータベースに保存していくアプリを作る上でも、「このデータにはどのくらいのサイズの器を用意すべきか?」を見極める力は非常に重要です。

試験の計算問題が、実際のコードの動きと繋がった瞬間、とてもワクワクしました!

コメント

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