数値表現 -情報処理シンプルまとめ

数値表現に関するブログのアイキャッチ画像 基礎理論

 基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,数値表現についてシンプルにまとめています。符号なし整数の説明からスタートし,符号付き整数(2の補数など),固定小数点数,浮動小数点数と進んでいきます。特に2の補数については,しっかり理解できるまで頑張りましょう。

ビットとバイト

 2進数の1桁は,コンピューターが扱う情報の最小単位であり,ビットといいます。1ビットの場合,0と1,2種類(=21)の情報を表すことができます。

 また,8ビットの単位を1バイトといい,文字や数字などのデータ量を表す単位として使われています。

1バイト=8ビット
※1バイトの場合,28=256種類の情報を表現できます。

補助単位

 数値の桁数が多い場合は,次の補助単位を使います。

k(キロ)1kバイト=210バイト≒103バイト
M(メガ)1Mバイト=220バイト≒106バイト
G(ギガ)1Gバイト=230バイト≒109バイト
T(テラ)1Tバイト=240バイト≒1012バイト
P(ペタ)1Pバイト=250バイト≒1015バイト

 小さい数値の場合は,次の補助単位を使います。

m(ミリ)1ms=2-10≒10-3
μ(マイクロ)1μs=2-20≒10-6
n(ナノ)1ns=2-30≒10-9
p(ピコ)1ps=2-40≒10-12

練習問題

 次の各数値を(  )内の単位で表しなさい。

① 31,000,000B(MB)  ② 91,000,000kB(GB)  ③ 0.000011s(μs)

① 31MB   ② 91GB   ③ 11μs

コンピューターで扱う数値

 コンピューターで扱う数値のビット数(桁数)は有限で,このビット数により扱える数値の範囲も決まります。

符号なし整数

 符号なし整数は,0と正の整数を扱います。1バイト(=8ビット)の場合の表現方法は次のとおりです。

 このように,1バイト(=8ビット)の符号なし整数の場合は,0~255までの256(=28)種類の数値を扱うことができます。

 よって、nビットの場合に表現可能な数値の範囲は次のようになります。

0~2n-1 までの 2n 種類

符号付き整数

 符号付き整数の場合は,正の整数と負の整数を扱います。最上位ビットを符号ビット(0=正,1=負)として扱います。

 負の数の表現方法には,絶対値表現と補数表現があります。コンピューターでは,引き算を負の数の足し算により行うのですが,このときに補数(2の補数)を使用します。

※ 絶対値表現や補数表現については,ここでは詳しく説明しません(2の補数についてのみ説明します)。

2の補数

 コンピューターでは,負の数の表現に2の補数を使います。2の補数は,2進法の場合,その性質を利用して簡単に求めることができます。

 このように、-23(10)を2の補数で表すと11101001になります。

-23(10)=11101001(2)

 2の補数(1バイトの場合)の求め方をまとめると,次のようになります。

① 対象の数値の絶対値を求める。

② ①を2進数に変換し,1バイトに収める(MSB側の空いた桁には0を入れる)。

③ ②の各桁(ビット)を反転する。

④ ③の値に1を加える。

 逆に,2の補数で表された2進数を10進数に変換する方法は次のとおりです。

 このように、符号付き整数00110011を10進数で表すと51に,11101001を10進数で表すと-23になります。

00110011(2)=51(10)

11101001(2)=-23(10)

 求め方をまとめると,次のようになります。

① 符号ビットが0の場合は,10進数に変換して終了。符号ビットが1の場合は,2進数を反転する。

② ①で求めた値に1を加える。

③ ②で求めた値を10進数に変換し,-(マイナス)記号を付ける。

 2の補数を使用すると,減算を加算で処理することができます。

 また,負の数を2の補数で表現する場合の符号付き整数(1バイトの場合)の表現方法は次のとおりです。

 このように,1バイトの符号付き整数の場合は,-128~127までの256(28)通りの数値を扱うことができます。

 よって,nビットの場合に表現可能な数値の範囲は次のようになります。

-2n-1~2n-1-1 までの 2n 種類

固定小数点数

 符号なし固定小数点数の場合は,0と正の小数を,符号付き固定小数点数の場合は,正の小数と負の小数(2の補数)を扱います。1バイトの場合で,上位4ビットを整数部,下位4ビットを小数部とした場合の表現方法は次のとおりです。

浮動小数点数

 浮動小数点数は,数値を指数形式で表し,符号,指数部,仮数部に分けて表現します。このとき,仮数部は0.1…となるようにします(正規化)。2バイトの場合で,1ビット目を符号ビット,次の4ビットを指数部,残りの11ビットを仮数部とした場合の表現方法は次のとおりです。

練習問題

問1 2バイトの符号なし整数で表すことのできる数値の範囲を求めなさい。また,何種類の数値を扱うことができるか求めなさい。

2バイトの符号なし整数の最小値と,最大値は次のようになる。
  最小値:0(2)=0(10)
  最大値:1111 1111 1111 1111(2)=65535(10)
よって,2バイトの符号なし整数で表現可能な数値の範囲は,
 0~65535
となる。また,扱える数値は,
 65536種類
となる。

【別解】次の式を使って求めることもできる。
  nビットの符号なし整数で扱える数値の範囲:0~2n-1
  nビットの符号なし整数で扱える数値の種類:2n種類
2バイト=16ビットなので,
  2n-1=216-1=65536-1=65535
よって,2バイトの符号なし整数で表現可能な数値の範囲は,
 0~65535
となる。また,扱える数値は,
 2n=216=65536通り
となる。

問2 次の各数値を1バイトの符号付き整数で表しなさい。負の数は2の補数で表すこと。

① 23(10)   ② 51(10)   ③ -89(10)

① 0001 0111   ② 0011 0011   ③ 1010 0111

③ -89(10)の絶対値は、
  89
となる。これを2進数に変換すると,
  1011001
となる。さらに,この値を1バイトで表すと、
  0101 1001
となる。この数値を反転し1を加えると、2の補数を求めることができる。
  0101 1001
   ↓
  1010 0110
   ↓
  1010 0111

問3 2の補数で表された各数値を10進数で表しなさい。

① 0011 0011   ② 1010 0111

① 51(10)   ② -89(10)

① 符号ビットが0の場合は,そのまま10進数に直せばよいので,
  51(10)
となる。

② 符号ビットが1の場合は,まず,ビットを反転し,1を加える。
  1010 0111
   ↓
  0101 1000
   ↓
  0101 1001
そして,この値を10進数に変換し,-(マイナス)記号を付ける。
  -89(10)

問4 2バイトの符号付き整数で表すことのできる数値の範囲を求めなさい。

次の数式を使用して求める。
  nビットの符号付き整数が扱える数値の範囲:-2n-1~2n-1-1
2バイト=16ビットなので、
  -216-1=-215=-32768
  216-1-1=32768-1=32767
よって,2バイトの符号付き整数で表すことのできる数値の範囲は,
  -32768~32767
となる。

問5 次の各値を1バイトの符号付き固定小数点数で表しなさい。ただし,上位4ビットを整数部,下位4ビットを小数部とする。

① 3.125(10)   ② -3.125(10)

① 0011 0010   ② 1100 1110

① 3.125(10)を2進数に変換すると,
  11.001(2)
となる。この値を上位4ビットを整数部,下位4ビットを小数部とする1バイトの固定小数点で表すと,
  0011 0010
となる。

② -3.125(10)の絶対値を求めると,
  3.125
となる。これを2進数に変換すると,
  11.001
となる。さらに,この値を1バイトで表すと,
  0011 0010
となる。最後に,この数値を反転し1を加える。
  0011 0010
   ↓
  1100 1101
   ↓
  1100 1110

問6 3.125(10)を下図のような浮動小数点数フォーマットで表しなさい。

まとめ

 今回は,数値の表現方法についてまとめてみました。ややこしいところもあったと思いますが,どうでしたか?特に,2の補数については,しっかり理解できるまで頑張ってください。練習問題を繰り返し解くことにより定着すると思います。また,時間が経つと忘れることもあると思いますので,また,いつか,読んでみてください。