C言語 | コンピュータシステム開発 | データ表現
コンピューターは、電気的なオンとオフの2状態で情報を表現する。この記事では、2進数と負数の表現に使われる補数について説明する。
基数
人は通常、0から9までの10個の数字を使う10進法を利用する。一方、コンピューターは電圧の状態を0と1で表す。この2つの記号で記述する数が2進数である。2進数では、各桁が2の累乗に対応する。
表1 - 10進数と2進数
| 10進数 | 2進数 |
|---|---|
| 0 | 0 |
| 1 | 1 |
| 2 | 10 |
| 3 | 11 |
| 4 | 100 |
| 5 | 101 |
| 6 | 110 |
| 7 | 111 |
| 8 | 1000 |
| 9 | 1001 |
値が大きくなると、2進数は人にとって読みにくい。そのため、デジタルデータを直接扱う場合は16進数を使うことが多い。16進数では、9を超える値をAからFで表す。
表2 - 主な基数
| 10進数 | 2進数 | 4進数 | 8進数 | 16進数 |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 1 | 1 | 1 | 1 | 1 |
| 2 | 10 | 2 | 2 | 2 |
| 3 | 11 | 3 | 3 | 3 |
| 4 | 100 | 10 | 4 | 4 |
| 5 | 101 | 11 | 5 | 5 |
| 6 | 110 | 12 | 6 | 6 |
| 7 | 111 | 13 | 7 | 7 |
| 8 | 1000 | 100 | 10 | 8 |
| 9 | 1001 | 101 | 11 | 9 |
| 10 | 1010 | 102 | 12 | A |
| 11 | 1011 | 103 | 13 | B |
| 12 | 1100 | 110 | 14 | C |
| 13 | 1101 | 111 | 15 | D |
| 14 | 1110 | 112 | 16 | E |
| 15 | 1111 | 113 | 17 | F |
デジタルデータの本質は2進数だが、プログラミング言語やバイナリエディターでは16進数で表示することが多い。
負数の表現と補数
2進数の桁自体には符号がない。コンピューターでは、一般に2の補数を使って負の整数を表現する。
1の補数は各ビットを反転すると得られる。2の補数は、1の補数に1を加えると得られる。
1100 1010 の1の補数 = 0011 0101
0110 1101 の2の補数 = 1001 0011
符号付きビット列では、最上位ビットが符号を表す。0なら非負、1なら負である。たとえば、8ビットの 1111 1100 は、2の補数が 0000 0100 なので -4 を表す。
2の補数を利用すると、減算を加算として処理できる。これはコンピューターシステムの基礎であり、C言語を学ぶうえでも重要である。