−情報処理技術者キーワード−補数2進数で負の数(マイナス)を表すときに使用するのに使用されるのが補数である。補数というのはある数に対し、その数を足すことでけた上がりが発生する最小の数と、その数を足すことでけた上がりが発生しない最大の数があります。(補数の詳細な説明は省きます。)2進数の場合は、非常に簡単で各けたの0と1を入れ替えたものが1の補数で、1の補数に+1したものが2の補数になります。コンピュータで負の数を表すのに2の補数を用いるのは、計算が容易だからです。コンピュータでは負の数を扱うときに“-”の記号は(コンピュータの内部構造が複雑になるので)使用できません。そのため、最上位ビットを符号として負の数を扱うことにしました。4ビットで0001(1)の負の数は1001(-1)になります。(-1)を計算します。1010になってしまいます。これは-2なので、負の数の加算処理は単純に行えなくなってしまい、正しい計算をするにはやはりコンピュータとして複雑なことをしなくてはなりません。そこで、考え方を変えて補数で負の数を表してみます。-1は1の2の補数として表すと1が0001で2の補数は0と1を入れ替えて+1ですから1111になります。0000(16)になります。ここで、4ビットで考えているので5ビット目の“1”は無視できるので、答えは0000(0)になります。2の補数を使うメリットは0の対し2の補数を計算すると0になることです。0000で5ビット目の1は無視して0000です。最上位ビットを符号として使用する場合、0として0000(+0)と1000(-0)の2通りが考えられますが、そういったこともなくなりました。4ビットの2進数で扱える数は以下のようになります。-1この例でわかるように2の補数を使うと正側と負側で表現できる数の範囲が違います。わかりづらい2の補数による負の数の表現ですが、負の数の加算処理が単純になるメリットがあるため、コンピュータで使用されています。最上位ビットを符号としてしているので、加算や減算でけたあふれ(オーバフロー)が発生するような場合、注意が必要です。1000になり、1000は上の表にあるように-8ですので、4ビットの2の補数表現でこの計算はできないことになります。C言語だと変数の型として符号のない表現(unsigned)もありますが、符号付き変数と符号なし変数の扱いには注意が必要です。