コンテンツにスキップ

数と表現

私たちが日常使っている数は0〜9の10種類の数字で表す10進数です。しかし、コンピュータの内部では電気信号の「ON / OFF」、つまり0と1の2種類だけで情報を扱います。この章では、コンピュータが数をどのように表現するかを学びます。

数を表すときに使う数字の種類の数を基数(きすう)と呼びます。私たちが普段使う10進数は基数が10、コンピュータが使う2進数は基数が2です。

n進数基数使用する数字主な用途
2進数20, 1コンピュータ内部のデータ表現
8進数80〜7ファイルのアクセス権限(Unix系OS)など
10進数100〜9日常生活の計算
16進数160〜9, A〜Fメモリアドレス、カラーコード(#FF0000)など

16進数では、10〜15に対応する数字としてA〜Fのアルファベットを使います。

10進数101112131415
16進数ABCDEF

異なるn進数の間で数を変換することを基数変換と呼びます。基数変換はITパスポート試験で非常に頻出のテーマです。

2進数の各桁は、右から順に2の0乗、2の1乗、2の2乗…の重みを持ちます。各桁の値に重みを掛けて合計すれば10進数に変換できます。

たとえば、2進数の 1011 を10進数に変換してみましょう。

桁の位置左から1桁目左から2桁目左から3桁目左から4桁目
桁の値1011
重み2³ = 82² = 42¹ = 22⁰ = 1
桁の値 × 重み8021

8 + 0 + 2 + 1 = 11(10進数)

10進数を2で繰り返し割り、その余りを下から上に並べると2進数になります。

たとえば、10進数の 155 を2進数に変換してみましょう。

割り算余り
155 ÷ 2771 ← 最下位ビット
77 ÷ 2381
38 ÷ 2190
19 ÷ 291
9 ÷ 241
4 ÷ 220
2 ÷ 210
1 ÷ 201 ← 最上位ビット

余りを下から読むと 10011011 → 10進数の155は2進数で 10011011 です。

2進数と16進数の変換は簡単です。2進数を4桁ずつ区切り、それぞれを16進数の1桁に対応させます。

2進数(4桁)00000001001000110100010101100111
16進数01234567
2進数(4桁)10001001101010111100110111101111
16進数89ABCDEF

たとえば、2進数 10011011 を16進数に変換するには、右から4桁ずつ区切ります。

1001 10119 B9B(16進数)

逆に、16進数 9B を2進数にするには各桁を4桁の2進数に展開します。

91001B101110011011(2進数)

2進数を3桁ずつ区切り、それぞれを8進数の1桁に対応させます。

たとえば、2進数 10011011 を8進数に変換するには、右から3桁ずつ区切ります。

10 011 0112 3 3233(8進数)

試験で出るポイント

基数変換は計算問題として頻出です。特に「10進数 → 2進数」と「2進数 → 10進数」の変換手順を確実に身につけましょう。2進数と16進数の変換は「4桁ずつ区切る」、2進数と8進数の変換は「3桁ずつ区切る」と覚えておきましょう。

2進数の加算(足し算)は、10進数と同じ筆算の要領で行いますが、1 + 1 = 10(繰り上がり)という点が異なります。

2進数の加算規則は次のとおりです。

計算結果
0 + 00
0 + 11
1 + 01
1 + 110(0を書いて1を繰り上げ)
1 + 1 + 111(1を書いて1を繰り上げ)

たとえば、1011(10進数で11)+ 0110(10進数で6)を計算してみましょう。

1 0 1 1
+ 0 1 1 0
-----------
1 0 0 0 1

結果は 10001(10進数で17)となり、11 + 6 = 17 と一致します。

2進数の減算(引き算)は、補数(ほすう)を使って加算に置き換える方法が重要です。コンピュータは内部的に減算を行う回路を持たず、補数を使った加算で代用しています。

2の補数とは、ある2進数の各ビットを反転(0→1、1→0)し、その結果に1を加えたものです。ある数の2の補数は、その数の負の数を表します。

たとえば、4ビットで 0101(10進数で5)の2の補数を求めてみましょう。

  1. 各ビットを反転: 01011010
  2. 1を加える: 1010 + 0001 = 1011

1011 は4ビットの2の補数表現で −5 を意味します。

7 - 5 を2進数の補数で計算してみましょう。

  • 7 の2進数表現: 0111
  • 5 の2の補数: 1011(上で求めた −5)
0 1 1 1 (7)
+ 1 0 1 1 (−5)
-----------
1 0 0 1 0

4ビットに収まる部分だけを取ると 0010(10進数で2)となり、7 − 5 = 2 と一致します。あふれた最上位の1(5桁目)は桁上がり(キャリー)として捨てます。

試験で出るポイント

2の補数の求め方(ビット反転 → +1)は必ず覚えましょう。「コンピュータが減算を加算で処理するために補数を使う」という仕組みが問われることがあります。

コンピュータで数値を表すには、あらかじめ使用するビット数(桁数)を決めておく必要があります。ビット数によって表現できる数の範囲が決まります。

正の数だけを扱う場合、nビットで表現できる範囲は次のとおりです。

0 〜 2ⁿ − 1

ビット数表現可能な範囲値の個数
4ビット0 〜 1516通り
8ビット0 〜 255256通り
16ビット0 〜 65,53565,536通り

負の数も扱う場合(最上位ビットを符号ビットとして使う)、nビットで表現できる範囲は次のとおりです。

−2ⁿ⁻¹ 〜 2ⁿ⁻¹ − 1

ビット数表現可能な範囲値の個数
4ビット−8 〜 716通り
8ビット−128 〜 127256通り
16ビット−32,768 〜 32,76765,536通り

いずれの場合も、nビットで表現できる値の個数は 2ⁿ通り です。たとえば、RGB各色を3ビットで表現すると、1色あたり2³ = 8通りなので、全体では 8 × 8 × 8 = 512色を表現できます。

試験で出るポイント

nビットで表現できる情報量は 2ⁿ通り です。試験では「8桁のパスワードで使える文字が26種類のとき、組み合わせは何通りか」(答え: 26⁸通り)のように応用される形でも出題されます。符号なし整数の最大値(2ⁿ − 1)と符号付き整数の範囲(−2ⁿ⁻¹ 〜 2ⁿ⁻¹ − 1)の違いも押さえておきましょう。

アプリで問題を解こう!