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言語を学ぶうえでも重要である。