2の補数: 符号付き2進数
符号付き整数の2の補数表現を理解しよう。正と負の2進数値の間の変換方法を、分かりやすいステップごとの実例で学べます。
Binary (Base 2) → Signed DecimalArithmetic
詳細な説明
2の補数は、コンピュータが符号付き(正と負の)整数を表現するために使う標準的な方法です。正の数と同じ2進数加算ハードウェアを使って負の数をエレガントに扱えます。
2の補数の仕組み:
n ビットの2の補数システムでは、最上位ビット(MSB)が符号ビットです: 正なら 0、負なら 1。8ビット数の場合:
- 正の範囲:
00000000から01111111(0 から +127) - 負の範囲:
10000000から11111111(-128 から -1)
正の数を負にする(2の補数を求める):
数を否定するには、すべてのビットを反転してから1を加算します:
例 --- 8ビット2の補数で -42 を求める:
- +42 から始める:
00101010 - すべてのビットを反転:
11010101 - 1 を加算:
11010110
したがって -42 は 11010110₂ と表現されます。
2の補数から10進数への逆変換:
MSB が 1(負の数)の場合、すべてのビットを反転し 1 を加えて絶対値を求めます:
- 与えられた値:
11010110 - MSB が 1 なので負の数
- 反転:
00101001 - 1 を加算:
00101010= 42 - 結果:
-42
2の補数が優れている理由:
最大の利点は、加算が符号付きでも符号なしでも全く同じように動作することです。CPU は符号付きと符号なしの加算に別々の回路を必要としません。例えば 5 + (-3):
00000101 (+5)
+ 11111101 (-3)
----------
100000010
8ビットを超えるキャリーを捨てると: 00000010 = 2。正解です。
一般的な範囲:
| ビット数 | 符号付き範囲 | 符号なし範囲 |
|---|---|---|
| 8 | -128 から +127 | 0 から 255 |
| 16 | -32,768 から +32,767 | 0 から 65,535 |
| 32 | -2,147,483,648 から +2,147,483,647 | 0 から 4,294,967,295 |
ユースケース
ファームウェア開発者は、温度(-40 から +125 度)のような符号付きセンサー値を、生のバイナリデータを返すハードウェアレジスタから読み取る際に、2の補数の算術を使用します。