2の補数とは何ですか?
2の補数は、コンピューターが固定ビット数を使って符号付き整数 — 正にも負にもなり得る数 — を格納する標準的な方法です。マイナス符号のために別の記号を用意する代わりに、負の数は普通の2進数の加算がそのまま機能するように符号化され、符号のための特別な処理は不要です。ほぼすべての現代のCPUは、この方法で整数を表現します。
この計算機は、10進整数とビット幅(8、16、または32ビット)を受け取り、その2の補数のパターンを2進数と16進数の両方で表示します。
どのように機能しますか?
選んだ幅 ビットに対して、各値は符号なしのビットパターンとして格納されます:
- 数 が非負なら、そのパターンは単に の2進数で、 ビットになるよう先頭にゼロを埋めます。
- 数 が負なら、そのパターンは の2進数です。
2番目の場合は が負なので、 は より小さい正の値となり、常に ビットに収まります。最上位(左端)のビットは、あらゆる負の数で 、あらゆる非負の数で になります — このビットが符号の役割を果たします。
公式
結果はちょうど 桁の2進数(または 桁の16進数)で書かれます。
計算例
例1:正の数
を ビットで符号化します。 なので、パターンは単に の2進数を8桁に埋めたものです:
例2:マイナス1
を ビットで符号化します。 なので、 を計算します:
マイナス1は、幅がいくつであっても常に途切れのない1の並びになります。
例3:マイナス5
を ビットで符号化します。 を計算します:
参照表(8ビット)
| 10進数 | 2の補数の2進数 | 16進数 |
|---|---|---|
| 5 | 00000101 | 0x05 |
| 0 | 00000000 | 0x00 |
| -1 | 11111111 | 0xFF |
| -5 | 11111011 | 0xFB |
| 127 | 01111111 | 0x7F |
| -128 | 10000000 | 0x80 |
注意点
- ビットの符号付き整数は から の範囲を、 ビットは から を、 ビットはおよそ 億をカバーします。選んだ範囲外の値は を法として折り返します。
- 先頭のビットは符号です: は非負の数、 は負の数を表します。
- 符号ビットのない通常の非負の数を2進数に変換するには10進数から2進数への変換器を、他の基数には一般的な数体系変換器を使ってください。
よくある質問
2の補数で-1はどうなりますか?
どの幅でもすべて1になります:8ビットでは (0xFF)、16ビットでは (0xFFFF)、といった具合です。
負の数の2の補数を手で求めるには?
その数の大きさを2進数で書き、すべてのビットを反転し、1を足します。 を8ビットで求めると: は 、反転すると 、1を足すと — と同じ結果です。
なぜビット幅が重要なのですか?
幅はパターンが占めるビット数を決め、したがって格納できる数の範囲を決めます。同じ10進値でも、幅が大きくなるほど先頭のゼロや1の並びが長くなります。