コンピュータの勉強でもされているのですか?私も昔アセンブラーで遊んでいた時のことを思い出しました。2進数もマイナスって何だ!と初めて聞いた時には頭がチカチカ・クラクラしますね(笑い)。さて、簡単のために8ビット(1バイト)の場合を考えましょう。2進数の16進数表記はよくご存知として、2進法のマイナス表現を分かりやすくするために、負の数を含む場合の2進・16進・10進の対応表を示します。
<2進数> <16進数> <10進数>
01111111 7FH +127
01111110 7EH +126
01111101 7DH +125
: : :
00001111 0FH +15
: : :
00001010 0AH +10
00000001 01H +1
00000000 00H 0
---------↑↓-----------
11111111 FFH -1
11111110 FEH -2
11111101 FDH -3
: : :
11111110 82H -126
11111101 81H -127
11111100 80H -128
さてFFHに1を加えると100Hとなりますね。しかし、8ビットは16進2桁であるために桁あふれ(オーバーフロー)してしまいます(→8bitCPUではオーバーフローキャリーが立つ)。しかし、オーバーフローを無視すると00Hとなり、FFHは0より1だけ小さいと考えることができますね。つまり-1と考えることができる。ここがミソなのです。するとFEHはさらに1小さいので-2、FDHは同様にして-3としていくのですね。
MovingWalkさんが言われているとおり、負の数を2進数で見た場合、必ず最上位のビットが”1”になっていますね。逆に0または正の数では最上位ビットは必ず”0”になっています。CPUは最上位ビットを見てその数が正か負かを判断しています。この最上位ビットを符号ビットと呼んだりしています。
以上整理すると、
(1)8ビットの場合0から255までの256個の数値を表現することができる。
(2)この256個の数値を半分に区分けし、それぞれ正の数と負の数に対応付けることができる。
(3)具体的には0H~7FHまでの128個の数値を1~127までの数値に、80H~FFHまでの128個の数値を-128~-1までの数値に割り当てる。
(4)従って8ビットのビットパターン全体で-128から+127までの256個の数値を表せることになる。
このような考え方を2の補数による負数の表現とか言っています。尚、16ビット・2バイトのケースは上の考え方をベースにご自分で確認してください。