2の補数計算機とは?
2の補数計算機は、10進数・2進数・16進数の間で数値を変換しながら、コンピュータ内部で負の数がどのように表現されるかを示してくれるツールです。2の補数は、現代のほぼすべてのプロセッサが符号付き整数を格納するために採用している標準的な方式であり、その仕組みを理解することはプログラマー、電子工学を学ぶ学生、そしてデジタル回路に関わるすべての人にとって欠かせません。この計算機では、任意の基数で数値を入力し、ビット幅(8・16・32ビット)を選ぶだけで、2の補数表現とその10進数値を瞬時に確認できます。
計算機の使い方
- 入力欄に数値を入力します。10進数・2進数・16進数のいずれにも対応しています。
- 必要に応じて入力値の基数を選択します。
- ビット幅を選びます:8ビット、16ビット、または32ビット。
- 結果を確認します。2進数・16進数・符号付き10進数の値が自動的に表示されます。
ビット幅は格納できる値の範囲を決めるため、とても重要です。たとえば8ビットの符号付き整数では -128~127、16ビットでは -32,768~32,767 の値を扱えます。
計算式の解説
2進数の2の補数は、次の2つの手順で求められます。
- すべてのビットを反転する(各0を1に、各1を0に変える)。これが1の補数です。
- その結果に 1を加える。
最上位ビットは符号ビットとして機能し、0なら正、1なら負を表します。
$$\text{Twos Complement} = \left(\sim \text{Number}_{\,2}\right) + 1 \pmod{2^{\text{Bit Width}}}$$負の10進数を2の補数に変換するには、\(2^{n} + \text{値}\) という式を使います(\(n\)はビット幅)。
計算例
-5 を8ビットの2の補数に変換してみましょう。
- まず +5 を2進数で表します:
0000 0101。 - ビットを反転します:
1111 1010。 - 1を加えます:
1111 1011。
したがって -5 は 1111 1011 として格納され、16進数では FB となります。確認:\(251 - 256 = -5\)(符号なしの値 251 から 256 を引くと -5 になります)。
ビット幅別の符号付き整数の範囲
2の補数は、コンピュータが符号付き整数を表すための標準的な方法です。ビット幅 \(n\) の場合、1つのビットが符号ビットとして機能するため、表現可能な符号付き範囲は \(-2^{n-1}\) から \(2^{n-1}-1\) となり、同じビットの符号なし解釈は \(0\) から \(2^{n}-1\) をカバーしています。すべての算術は \(2^{n}\) を法として折り返されます。
| ビット幅 \(n\) | 符号付き最小値 \(-2^{n-1}\) | 符号付き最大値 \(2^{n-1}-1\) | 符号なし最大値 \(2^{n}-1\) | 法 \(2^{n}\) |
|---|---|---|---|---|
| 8 | -128 | 127 | 255 | 256 |
| 16 | -32,768 | 32,767 | 65,535 | 65,536 |
| 32 | -2,147,483,648 | 2,147,483,647 | 4,294,967,295 | 4,294,967,296 |
| 64 | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 | 18,446,744,073,709,551,615 | 18,446,744,073,709,551,616 |
例えば、10進数5の8ビット2の補数は、符号なしバイトとして読むと 251 となり、符号付き値として \(-5\) を表します。
一般的な8ビット値の10進数・2進数・16進数リファレンス
次の表は、代表的な符号付き10進数値を、8ビットの2の補数における2進数および16進数形式にマッピングしています。負の数は最上位ビットが1に設定されています。値を否定するには、すべての8ビットを反転して1を加えます。
| 符号付き10進数 | 8ビット2進数 | 16進数 | 符号なし値 |
|---|---|---|---|
| -128 | 1000 0000 | 0x80 | 128 |
| -64 | 1100 0000 | 0xC0 | 192 |
| -5 | 1111 1011 | 0xFB | 251 |
| -1 | 1111 1111 | 0xFF | 255 |
| 0 | 0000 0000 | 0x00 | 0 |
| 1 | 0000 0001 | 0x01 | 1 |
| 5 | 0000 0101 | 0x05 | 5 |
| 64 | 0100 0000 | 0x40 | 64 |
| 127 | 0111 1111 | 0x7F | 127 |
2進数形式を独立して検証するには、8ビットパターン 11111011 を10進数に変換することができます。これは符号なしバイトとして251に等しく(符号付きとして \(-5\) と解釈されます)、251 になります。
主な用語と定義
- ビット幅
- 整数を格納するために使用される2進数字の数(通常は8、16、32、または64)。これは法 \(2^{n}\) を固定し、したがって表現可能な値の範囲を決定します。
- 符号ビット
- 符号付き数が負(1)か非負(0)かを示す単一のビット。2の補数では最上位ビットです。
- 最上位ビット (MSB)
- 2進数の左端で最も高い値を持つビット。符号付き2の補数値では、MSBは符号ビットとしても機能します。
- 1の補数
- 数のビット反転—すべての0が1になり、すべての1が0になります( \(\overline{B}\) )。これは2の補数を形成するために1を加える前の中間ステップです。
- 2の補数
- 優位な符号付き整数エンコーディング:値を否定するには、すべてのビットを反転して1を加えます。つまり \(\overline{B}+1 \pmod{2^{n}}\) です。これはゼロの単一表現を提供し、同じハードウェアで符号付きおよび符号なし数の加算を可能にします。
- オーバーフロー / 折り返し
- 結果がビット幅の表現可能な範囲を超えた場合に発生します。値は \(2^{n}\) を法として折り返されます。例えば、8ビット最大値127に1を加えると-128に折り返されます。
- 符号付き整数対符号なし整数
- 符号付き整数は2の補数を使用して負を表すことができます(範囲 \(-2^{n-1}\) から \(2^{n-1}-1\) )。符号なし整数はすべてのビットパターンを非負として扱います(範囲 \(0\) から \(2^{n}-1\) )。ビットは同一です—解釈が異なるだけです。
よくある質問
なぜコンピュータは2の補数を使うのですか? 加算と減算を同じ回路で処理でき、さらに符号絶対値方式や1の補数方式と違ってゼロの表現が1通りしかないためです。
数値がビット幅に収まりきらない場合はどうなりますか? 値がオーバーフローして折り返し、予期しない結果になります。これを避けるには、より広いビット幅を選んでください。
通常の10進数に戻すにはどうすればよいですか? 符号ビットが1の場合は、もう一度2の補数をとってマイナス符号を付けます。0の場合は、そのまま通常の2進数として読み取ります。