MCPで接続 →

計算を入力してください

公式

広告

結果

1の補数
250
111110102 (8-bit)
元の値(10進数) 5
元の値(2進数) 00000101
1の補数(2進数) 11111010
1の補数(10進数) 250
ビット幅 8

1の補数とは?

2進数の1の補数は、すべてのビットを反転(フリップ)して作ります。つまり0は1に、1は0に置き換えるだけです。結果は使用するビット数によって変わるため、4・8・16・32ビットといったビット幅をあらかじめ選ぶ必要があります。この表現方式は初期のコンピュータで符号付き整数を表すために使われていました。現在でも2進数演算の学習や、誤り検出に用いるチェックサムを理解するうえで欠かせない考え方です。

各ビットを反転して1の補数を生成した8ビットの2進値
1の補数は、指定したビット幅内のすべてのビットを反転します。

この計算機の使い方

0以上の10進数を入力し、ビット幅を選ぶだけです。計算機はその数値を指定した幅でマスクし、全ビットを反転したうえで、結果を2進数・10進数の両方で表示します。入力した数値が選んだ幅で表せる範囲を超える場合は、その幅に収まる下位ビットだけを残してから反転します。

計算式の解説

計算は $$\text{ones} = \left(\sim n\right) \,\&\, \left(2^{w} - 1\right)$$ で行います。\(2^{w} - 1\) は w 個の1が並んだマスクです(8ビットなら 11111111 = 255)。ビット否定(\(\sim\))が n の全ビットを反転し、マスクが選んだ幅を超える上位ビットを取り除くことで、答えが範囲内に収まります。

4、8、16、32セルの4本のビット幅ストリップが長さを増しながら表示されている
ビット幅によって反転されるビット数が決まります。

計算例

8ビットで数値5を例にとります。2進数では \(5 = 00000101\) です。全ビットを反転すると 11111010 となり、これは10進数で250にあたります。したがって8ビットにおける5の1の補数は 250 です。4ビットの場合、\(5 = 0101\) で、反転すると \(1010 = 10\) になります。

よくある質問

1の補数と2の補数はどう違いますか? 2の補数は1の補数に1を加えたものです。これにより、0の表し方が2通りできてしまう問題を回避できます。

0の1の補数は? 8ビットでは 11111111 = 255 になります。すべてのビットが1に変わるためです。

なぜビット幅によって答えが変わるのですか? ビットの反転は、存在するビットの数に左右されるからです。幅が広いほど先頭に1が多く並び、10進数としての値も大きくなります。

最終更新: