はじめに
10月の基本情報技術者試験(FE)に向けた「医療情報技師試験・過去問深掘りシリーズ」の第2弾です!
今回は、ITの基礎中の基礎でありながら、システムを作る上で絶対に避けては通れない「ビット数と表現できる数の範囲」に関する問題を取り上げます。
実際に出題された問題
【第24回 情報処理技術系 問2】
符号付き整数で、「-127〜127」を表現するには、最低何ビット必要か。
- 6
- 7
- 8
- 9
- 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つのパターンがあります。
- 符号なし整数(マイナスを考えない)0からスタートして、単純に正の数だけを数えます。表現範囲:0 〜 255 (合計256通り)
- 符号付き整数(マイナスも考える) ← ★今回の問題!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(オーバーフローして一周回ってしまう!)
このように、データの「器(ビット数)」の大きさを知らずに開発を進めると、システム上で予期せぬバグ(オーバーフロー)を引き起こす原因になります。
タスク管理・動線管理ツールのように、正確な時間やステータスをデータベースに保存していくアプリを作る上でも、「このデータにはどのくらいのサイズの器を用意すべきか?」を見極める力は非常に重要です。
試験の計算問題が、実際のコードの動きと繋がった瞬間、とてもワクワクしました!

コメント