2の補数を10進数へ変換する方法|2進数・16進数の読み方
この記事の要点
- 最上位ビットが0なら通常の2進数として読みます。
- 1なら「反転して1を足す」か「符号なし値から2ⁿを引く」と求められます。
1101 0110は8ビット符号付きで-42です。
最上位ビットで符号を判定する
最初にビット幅を確定します。最上位が0なら0以上、1なら負数です。たとえば1101 0110は8ビットでは負数ですが、先頭に0を付けた9ビットの0 1101 0110なら214です。
方法1:反転して1を足す
1101 0110の全ビットを反転:0010 1001- 1を加算:
0010 1010 0010 1010は42。元は負数なので-42
結果
1101 0110 → -42
2の補数をもう一度取ると絶対値へ戻る性質を利用しています。
方法2:符号なし値から2のn乗を引く
1101 0110を符号なしで読むと214です。8ビットなので256を引きます。
214 − 28 = 214 − 256 = −42先頭が1のときは常に符号なしの値 − 2ⁿで求められます。プログラムや多数の値を処理するときに便利です。
16進数D6から変換する
HEXの1桁は4ビットです。D6は2桁なので通常は8ビットとして扱い、2進数にすると1101 0110です。先頭が1なので、0xD6 = 214から256を引いて-42になります。
HEXだけでは符号は決まりません
FFは8ビット符号付きなら-1、符号なしなら255です。データ型や通信仕様を確認してください。
最上位が0なら通常どおり読む
0010 1010は32 + 8 + 2 = 42です。反転や引き算は不要です。0000 0000は0で、2の補数では負の0はありません。
よくある質問
2の補数を10進数へ戻す方法は?
先頭が0なら通常の2進数として読みます。先頭が1なら反転して1を足し、得られた絶対値に負号を付けます。
11010110を8ビットで読むと何ですか?
符号付き2の補数では-42、符号なし整数では214です。
引き算で求める方法はありますか?
はい。符号なしの値から2のビット幅乗を引きます。11010110なら214-256=-42です。
16進数D6は常に-42ですか?
いいえ。8ビットの符号付き2の補数として読む場合に-42です。符号なしなら214です。