2 の補数
N
数字の 2 の補数の範囲は~です。−(2N − 1 − 1)
+(2N - 1)
これは、数値の 2 の補数表現を取得するには、次のようにするためです。
- 数値がゼロ以上の場合はそのままにしておきます。
- すべてのビットを反転し、数値が 0 未満の場合は 1 を追加します。
したがって、最初のビット (MSB) は符号ビットになり、数値が負の場合は 1 になります。負の数を変換しようとしてゼロから始まる数になる場合 (または正の数を変換しようとして 1 から始まる数になる場合)、この数を格納するためにより多くのビットを取得する必要があります。ちゃんと。
それを念頭に置いて、N
が 5 に等しい場合:
最大
(25 - 1)
= = =(24 - 1)
16 - 1
15
最小
−(25 − 1 − 1)
= = =−(24 − 1)
−(16)
-16
可能な最大数 (15) 10 = 01111 2を 1 つ追加すると、10000 2 = -16 になります。これが、可能な最大/最小値である理由です。
16 進数を 2 進数に 1 桁ずつ変換する:
-EA
-EA 16 = -(1110 1010) 2
この数値の長さが 8 ビットのみの場合
2 の補数を取得するには、すべてのビットを反転して 1 を追加する必要があります。
-EA 16 = (0001 0101 +1) 2 = 0001 0110 2
そうすることで、取得した数値が正のように見えるため、符号を保存するためにもう 1 ビット必要であることがわかります。(この表現では、負の数は常に1 から始まります。この数が負であることはわかっていますが、0 から始まります)。
得られた数値を 10 進数に変換すると、正の値である 22 が得られます。この問題は、記号を表すビットを追加しなかったために発生しました。
追加の符号ビットを使用:
9 ビット長の場合
-EA 16 = -(0 1110 1010) 2 (1 0001 0101 +1) 2 = 1000 0110 2
したがって、その数値を格納するには 9 ビットが必要です。
24
24 16 = (0010 0100) 2
このように数値を適切に保存するには、7 ビット (6 ビット + 符号ビット) しか必要ありません。
レジスタ総ビット数
両方の数値を格納できるはずなので、9 ビットのレジスタが必要です。(最大数のサイズを取得する必要があります。そうしないと、切り捨てられて誤って表現されます。)
9ビットレジスタ
少し変わっていますが、9 ビット レジスタは次の範囲の数値を格納できます。
最大
(29 - 1)
= = = = FF16(28 - 1)
256 - 1
255
最小
−(29 − 1 − 1)
= = = = -100 16−(28 − 1)
−(256)
-256
ご覧-EA > -100
のとおり24 < FF
、数字を保存できます。