MCPで接続 →

計算を入力してください

公式

広告

結果

Two's Complement Binary (8-bit)
11111011
2の補数表現
符号なしの値 251
符号付きの値 -5
ビット幅 8ビット

2の補数計算機とは?

2の補数は、コンピュータが符号付き整数を格納する際の標準的な方式です。この計算機は、任意の10進数を、選んだビット幅(4・8・16・32ビット)の2の補数による2進数表現へ変換します。さらに、そのビットパターンが表す「符号なしの値」と「符号付きの値」の両方を表示します。

使い方

10進数(正の数でも負の数でもOK)を入力し、ビット幅を選ぶだけです。ツールは入力値を \(2^{n}\) で割った余り(モジュロ)に変換し、CPUが実際に格納するのとまったく同じビットパターンを生成します。あわせて、その同じパターンが符号付きの値としてはいくつになるかも表示するため、変換が正しいかどうかを確認できます。

計算式の仕組み

nビットのフィールドでは、符号なし表現は u = ((x mod 2^n) + 2^n) mod 2^n で求められます。これにより負の数が「回り込み(ラップアラウンド)」ます。たとえば8ビットなら、−5 は \(256 - 5 = 251\) となり、その2進数は 11111011 です。逆に、あるパターンを符号付きの値に戻すには、最上位ビット(MSB)を確認します。MSBが1なら(つまり u ≥ 2^(n-1) なら)値は u − 2^n、そうでなければそのまま u です。なお、符号を反転させる別の方法として、全ビットを反転して1を足す方法もあります:~x + 1

$$\text{Unsigned} = \left(\,\text{Decimal} \bmod 2^{\text{Bits}}\,\right),\qquad \text{Signed} = \begin{cases} \text{Unsigned} & \text{Unsigned} < 2^{\,\text{Bits}-1} \\[4pt] \text{Unsigned} - 2^{\text{Bits}} & \text{otherwise} \end{cases}$$
Number line showing unsigned values wrapping into signed positive and negative ranges
Values at or above 2^(n-1) wrap to negative; the upper unsigned half maps to negative signed numbers.

計算例

−5 を8ビットの2の補数に変換してみましょう。ステップ1:\(2^{8} = 256\)。ステップ2:\(u = ((-5 \bmod 256) + 256) \bmod 256 = 251\)。ステップ3:251 を2進数で表すと 11111011。MSBが1なので、符号付きの値は \(251 - 256 = -5\) となり、変換が正しいことが確認できます。

Step diagram converting a negative decimal to two's complement binary
Two's complement of a negative value: invert the bits of the magnitude, then add one.

よくある質問

数値がビット幅に収まらない場合はどうなりますか? ハードウェアと同じように、\(2^{n}\) でラップ(オーバーフロー)します。たとえば 300 を8ビットで表すと \(300 - 256 = 44\) になります。

なぜ符号なしの値と符号付きの値が異なるのですか? 同じビットでも2通りの読み方があるためです。符号なしではすべてのビットを正の重みとして読みますが、符号付きでは最上位ビットを負の重みとして扱います。

64ビットには対応していますか? このツールは、計算精度を安全な範囲に保つため、最大32ビットまでの一般的なビット幅に対応しています。

最終更新: