使い方
- 数またはビット列に数を入力します。ビット列の場合は、書き方で16進数か2進数を選びます。
- ビット幅を選びます。コンピュータが保存するビットの数で、8、16、32、64のいずれかです。
- 保存されるパターンは2の補数のビット列で読み、ほかの2つの方式は比べる方式で読みます。
- 確認が数は収まらないと示した場合、表示されるビットは、代わりにコンピュータが保存するものです。
負の数の保存
コンピュータは、符号付きの整数を決まったビット数で保存します。2の補数では、最上位ビットが −2^(n−1) を表し、ほかのビットは通常どおり足し合わされます。−5を8ビットで書くには、5を00000101と書き、すべてのビットを反転して1を足します:11111010 + 1 = 11111011。
−5 → 00000101 → 11111010 → 11111011(16進数で FB)
1の補数と符号付き絶対値
- 1の補数は、大きさのすべてのビットを反転します。−5は11111010です。
- 符号付き絶対値は、大きさをそのまま保ち、最上位ビットを符号にします。−5は10000101です。
- どちらも0が2つあります。1の補数でのすべて1のビット、および符号付き絶対値で符号ビットだけが1のものは −0です。
- 2の補数は0が1つで、正の数より負の数が1つ多くあります。ほとんどのプロセッサが整数に使う方式です。
範囲とオーバーフロー
n ビットの2の補数の範囲は −2^(n−1) から2^(n−1) − 1です。8ビットでは −128から127まで、32ビットでは −2,147,483,648から2,147,483,647までです。範囲外の値は折り返されます。200は8ビットに収まらず、11001000は2の補数で −56を表すため、−56と読まれます。
このツールが扱わないもの
- 演算:このツールが示すのは、数がどう保存されるかであり、2つの数を足したり掛けたりした結果ではありません。
- 小数と浮動小数点数は、それ自身の形式を持ちます。IEEE 754の変換ツール を参照してください。
- オーバーフローで折り返さず、エラーを出す言語があります。このツールは折り返した結果を示し、その旨を表示します。
例:8ビットの −5
書き方を10進数、ビット幅を8ビットにして −5を入力します。2の補数のパターンは11111011で、16進数では FB、符号なしの数としては251です。
同じ −5を別の2つの方式で見ると、1の補数は11111010、符号付き絶対値は10000101です。
| 方式 | ビット | 16進数 | 値 |
|---|---|---|---|
| 2の補数 | 1111 1011 | FB | -5 |
| 1の補数 | 1111 1010 | FA | -5 |
| 符号付き絶対値 | 1000 0101 | 85 | -5 |
| 符号なし | 1111 1011 | FB | 251 |
よくある質問
コンピュータは、マイナス記号ではなく2の補数を使うのはなぜですか?
マイナス記号は、加算の回路ごとに独自の規則が必要になります。2の補数では、負の数と正の数で足し算と引き算が同じように働き、0も1つしかありません。
負の範囲が正の範囲より1つ多いのはなぜですか?
0が2^n 個のパターンの1つを使うため、正の値は1から2^(n−1) − 1まで、負の値は −2^(n−1) まで下がります。8ビットでは、余分な値は −128で、対になる正の値がありません。
このページでオーバーフローとは何を意味しますか?
数がビット幅より多くのビットを必要とすることです。ページは、その幅が保持するビットを示し、確認の行は値が収まらないと示します。例えば、8ビットの128は10000000を保持し、これは −128と読まれます。
64ビットの計算では、なぜ正確な整数を使うのですか?
JavaScript の数は2^53までしか正確ではなく、64ビットの値は2^64まであるためです。このページは BigInt を使うため、すべてのビットが保たれ、−9,223,372,036,854,775,808という下限も正確に示されます。
Java は整数に2の補数を使いますか?
はい。Java 言語仕様は、整数型を2の補数で定義しているため、int は32ビットの2の補数、long は64ビットの2の補数です。
出典
数値と文章の最終確認日:2026年11月10日火曜日。