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。
計算例
−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\) となり、変換が正しいことが確認できます。
よくある質問
数値がビット幅に収まらない場合はどうなりますか? ハードウェアと同じように、\(2^{n}\) でラップ(オーバーフロー)します。たとえば 300 を8ビットで表すと \(300 - 256 = 44\) になります。
なぜ符号なしの値と符号付きの値が異なるのですか? 同じビットでも2通りの読み方があるためです。符号なしではすべてのビットを正の重みとして読みますが、符号付きでは最上位ビットを負の重みとして扱います。
64ビットには対応していますか? このツールは、計算精度を安全な範囲に保つため、最大32ビットまでの一般的なビット幅に対応しています。