二進法
日常生活では、10ごとに位が上がる十進法が一般的に使われる。
0, 1, 2, 3, ..., 9, 10, 11, ...
十進法で表わした数のn桁目は10^(n-1)を表わしている。
2583 = (2 * 10^3) + (5 * 10^2) + (8 * 10^1) + (3 * 10^0)
二進法では、2ごとに位が上がる。
0, 1, 10, 11, 100, 101, 110, 111, 1000, ...
十進法と二進法の区別を付けるために、二進表記した数には最後に(2)を付けることにする。
10011(2) = (1 * 2^4) + (0 * 2^3) + (0 * 2^2) + (1 * 2^1) + (1 * 2^0) = 19
一般に、コンピュータの内部では数の表現に二進法が用いられている。
2の補数
a + b = 2^N のとき、bをaの「2の補数」という。
負の数を表わすのに2の補数が用いられる。
ある数nの2の補数は、nの全てのビットを反転させた後、1を加えることによって得られる。
例えば、-2 のビット表現を求めよう。(8ビットで整数を表わすとする) 2 は 00000010(2) であるので、全てのビットを反転させた 11111101(2) に 1 を足した 11111110(2) が -2 を表わす。
00000000(2) = 0
00000001(2) = 1
...
01111111(2) = 127
10000000(2) = -128
10000001(2) = -127
...
11111110(2) = -2
11111111(2) = -1
負の数に2の補数を用いると、減算を「負の数の加算」として計算できるという利点がある。
浮動小数点数
IEEE754 規格では、浮動小数点数を32ビット(単精度)または64ビット(倍精度)で表現する。
32ビットの場合について説明する。
[符号ビット 1ビット][指数部 8ビット][仮数部 23ビット]
浮動小数点数は (-1)^s * F * 2^E のように表わされる。 F が仮数フィールドに、E が仮数フィールドに対応する。
仮数部
仮数フィールド F は、仮数部の対応は次のようになる。
仮数部を m_22 m_21 ... m_0 とすると
F = 1.m_22 m_21 ... m_0(2)
指数部
指数部には、実際の指数 E に 127 を加えた値が入る。
これは、数の大小比較を容易にするためである。
例
100.25 = 64 + 32 + 4 + (1/4) = 1100100.01(2) = 1.10010001 * 2^6
符号ビットは 0
指数部は、6 + 127 = 133 に相当する数を入れる。よって 10000101
仮数部は、1.10010001 の先頭の 1 を省略して 10010001000000000000000
よって、100.25 を IEEE754 の表記法で表わすと 01000010110010001000000000000000 になる。