戻る 符号つき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 000000011
00000010 2 000000102
01111101125 01111101125
01111110126 01111110126
01111111127 01111111127
10000000128 10000000-128
10000001129 10000001-127
10000010130 10000010-126
11111101253 11111101-3
11111110254 11111110-2
11111111255 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進数の数字や下のボタンをクリックすると、値を自由に変えることができます。

「レ」 ボタンをクリックすると、数値はクリアされて 0 になります。
「▲」 ボタンをクリックすると数値はひとつ大きく、 「▼」 ボタンをクリックするとひとつ小さくなります。






符号つき2進数も符号なし2進数も、−や+の記号がついていないので、目で見て区別できません。
"10110001" は 177 なのか -79 なのか、一見して区別できなくても構わないのでしょうか?

符号つき2進数と符号なし2進数が混在していると、 ヒトには区別できませんから、 もちろん困ります。
私の借金がたちまち貯金に変わる…、それならまぁ、構わないんですが。

ヒトには区別できませんが、 幸いなことに、 これらはコンピュータの中で使用されています。
コンピュータはこれらのデータをプログラムに従って処理していきますが、そのプログラムには、 これは符号付き2進数として処理しなさい、これは符号なし2進数として計算しなさい、 というようなことが逐一指定されています。
ヒトは区別できなくても、 コンピュータはプログラムの指示に従って正しく処理できますから、 問題はないのです。




情報処理概論 に戻る   講義資料 に戻る   戻る

*1 4ビットの場合は -8 になります。

符号なし2進数符号つき2進数
2進数10進数2進数10進数
  0000 0   00000
  0001 1   00011
  0010 2   00102
  0011 3   00113
  0100 4   01004
  0101 5   01015
  0110 6   01106
  0111 7   01117
  1000 8   1000-8
  1001 9   1001-7
  101010   1010-6
  101111   1011-5
  110012   1100-4
  110113   1101-3
  111014   1110-2
  111115   1111-1

Java applet 圧縮アーカイブファイル    自由利用マーク
update: 2007.06.02  address