|
|
符号つき2進数 (signed binary) |
2進数 で負の数を取り扱う場合、 「符号つき2進数」 を使用します。
「符号つき2進数」 といっても、2進数の前に "+" や "−"
の記号がついているわけではありません。
下表は、8桁の2進数について、符号つき2進数と符号なし2進数を比較したものです。
符号つき2進数は最上位ビット (MSB: most significan bit) が負の数を表し、
これを符号ビット (sign bit) といいます。
赤く表示しているのが符号ビットです。
| 符号なし2進数 | 符号つき2進数 | ||
|---|---|---|---|
| 2進数 | 10進数 | 2進数 | 10進数 |
| 00000000 | 0 | 00000000 | 0 |
| 00000001 | 1 | 00000001 | 1 |
| 00000010 | 2 | 00000010 | 2 |
| 01111101 | 125 | 01111101 | 125 |
| 01111110 | 126 | 01111110 | 126 |
| 01111111 | 127 | 01111111 | 127 |
| 10000000 | 128 | 10000000 | -128 |
| 10000001 | 129 | 10000001 | -127 |
| 10000010 | 130 | 10000010 | -126 |
| 11111101 | 253 | 11111101 | -3 |
| 11111110 | 254 | 11111110 | -2 |
| 11111111 | 255 | 11111111 | -1 |
最上位ビット (MSB) は負の数を表しますから、 8ビットの符号つき2進数では、
これが "1" の場合、-128 になります
。
したがって上表の通り、8ビットの符号つき2進数、"1000000" は -128 で、
"1000001" は -127、"11111111" は -1 です。
符号ビットが "0" であれば、符号なし2進数と全く同じになります。
8ビットの符号なし2進数は 0 〜 255 の整数を表すのに対して、
符号つき2進数は -128 〜 127 の整数を表します。
下図は、 符号つき2進数と、符号なし2進数を分かりやすく表しています。
最初は符号なし2進数として表示されていますが、
をクリックすると
符号つき/符号なし が切り替わります。
最上位ビット (MSB) は負の数を表しますから、ここが "1"
の場合、8ビットの符号つき2進数では -128
、
符号なし2進数では 128 です。
2進数の数字や下のボタンをクリックすると、値を自由に変えることができます。
符号つき2進数も符号なし2進数も、−や+の記号がついていないので、目で見て区別できません。
"10110001" は 177 なのか -79 なのか、一見して区別できなくても構わないのでしょうか?
符号つき2進数と符号なし2進数が混在していると、 ヒトには区別できませんから、 もちろん困ります。
私の借金がたちまち貯金に変わる…、それならまぁ、構わないんですが。
ヒトには区別できませんが、 幸いなことに、 これらはコンピュータの中で使用されています。
コンピュータはこれらのデータをプログラムに従って処理していきますが、そのプログラムには、
これは符号付き2進数として処理しなさい、これは符号なし2進数として計算しなさい、
というようなことが逐一指定されています。
ヒトは区別できなくても、 コンピュータはプログラムの指示に従って正しく処理できますから、
問題はないのです。
*1 4ビットの場合は -8 になります。
符号なし2進数 符号つき2進数
2進数 10進数 2進数 10進数
0000 0
0000 0
0001 1
0001 1
0010 2
0010 2
0011 3
0011 3
0100 4
0100 4
0101 5
0101 5
0110 6
0110 6
0111 7
0111 7
1000 8
1000 -8
1001 9
1001 -7
1010 10
1010 -6
1011 11
1011 -5
1100 12
1100 -4
1101 13
1101 -3
1110 14
1110 -2
1111 15
1111 -1