負の10進数を2の補数へ変換する方法|8ビットの計算例
この記事の要点
- 最初に8・16・32ビットなどの幅を決めます。
- 絶対値を2進数にし、全ビットを反転して1を足します。
- -42の8ビット表現は
1101 0110、HEXはD6です。
負の10進数を変換する基本手順
- 値が選んだビット幅の範囲内か確認します。
- 負号を外した絶対値を2進数にし、左側を0で埋めます。
- 指定幅の全ビットを反転します。
- 反転後のビット列に1を足します。
ビット幅は省略できません
-1は8ビットなら1111 1111、16ビットなら16個の1です。先に幅を固定します。
例:-42を8ビットへ変換
42は32 + 8 + 2なので0010 1010です。反転すると1101 0101、1を足すと1101 0110になります。
42 → 0010 10100010 1010 → 1101 01011101 0101 + 1 → 1101 0110
結果
-42 = 1101 0110(8ビット)
検算は214 - 2⁸ = 214 - 256 = -42です。
16進数へ変換する
右から4ビットずつ区切ります。1101はD、0110は6です。
1101 0110 → D6 → 0xD6D6は8ビット符号付きなら-42、符号なしなら214です。HEXだけでは符号の有無は決まりません。
正の数と0はそのまま表す
0以上の値は反転しません。42は0010 1010、0は0000 0000です。8ビットの正の最大値127は0111 1111です。
よくある間違い
- 反転だけで終えると1の補数です。
- 先頭の0を省くと反転対象が変わります。
- 8ビットで-129や128は表せません。
- HEXを見ただけで負数とは決められません。
よくある質問
負の10進数を2の補数へ変換する手順は?
ビット幅を決め、絶対値をその幅の2進数にし、全ビットを反転して1を足します。
-42の8ビット2の補数は何ですか?
2進数では11010110、16進数ではD6です。
正の数にも反転が必要ですか?
不要です。通常の2進数を指定したビット幅まで0で埋めます。
ビット幅を決める必要があるのはなぜですか?
反転するビット数と表現範囲がビット幅で決まるためです。