私はこれで少し迷っています。2 つの小数ビットを使用する必要がある
0.(a-1)(a-2)
.00 .01 .10
そのように、 andを使用できるようになりました.11
が、負の数 (2 の補数) も.10
必要-.5
です。それとも-.25
?.11
と同じ-.75
ですか?それとも-.5
?どちらの場合も前者であると確信していますが、完全に肯定的ではありません。
私はこれで少し迷っています。2 つの小数ビットを使用する必要がある
0.(a-1)(a-2)
.00 .01 .10
そのように、 andを使用できるようになりました.11
が、負の数 (2 の補数) も.10
必要-.5
です。それとも-.25
?.11
と同じ-.75
ですか?それとも-.5
?どちらの場合も前者であると確信していますが、完全に肯定的ではありません。
2の補数表記では、負の数の最上位ビットはすべて1に設定されます。これらの数を8ビットとして格納し、2を「2進小数点」の右側に配置するとします。
定義上、、、x + -x = 0
次のように書くことができます。
0.5 + -0.5 = 0.10 + 111111.10 = 0 // -0.5 = 111111.10
0.25 + -0.25 = 0.01 + 111111.11 = 0 // -0.25 = 111111.11
0.75 + -0.75 = 0.11 + 111111.01 = 0 // -0.75 = 111111.01
等々。
このように8ビットを使用すると、格納できる最大数は
011111.11 = 31.75
最小の正の数は
000000.01 = 0.25
最小の負の数は
111111.11 = -0.25
最小(つまり、最も負)は
100000.00 = -32
このように見てください:
あなたは通常のバイナリ表現を持っています
8ビットワードと仮定しましょう...
最初のビット (MSB) の値は 128、2 番目のビットは 64 というように...
つまり、最初のビット (MSB) は 2^7 です ... 2 番目のビットは 2^6 です ... そして最後のビットは 2^0 です
これで、8 ビット ワードには小数点以下 2 桁があると仮定できます ....
最初のビット (MSB) 2^5 から開始し、2^-2 の最後のビットで終了します。
ここに魔法はありません...
これを 2 進補数に変換するには、最初のビットの値を単純に否定します。
したがって、2^5 ではなく -2^5 になります。
したがって、基数 10 -0.75 は 2 進補数
111111.01 ...
(1*(-32) + 1*16 + 1*8 + 1*4 + 1*2 +1*1 + 0*0.5 + 1*0.25)になります。
(1*(-2^5) + 1*2^4 + 1*2^3 + 1*2^2 + 1*2^1 +1*2^0 + 0*2^(-1) + 1 *2^(-2))
2 の補数で格納された数値は、最上位ビットの大きさの符号を反転します (たとえば、16 ビットの数値の場合、上位ビットは +32768 ではなく -32768 になります)。他のすべてのビットは通常どおりに動作します。その結果、複数語の数で数学を実行する場合、各数の上位ワードは 2 の補数と見なす必要があります (その最上位ビットが全体の数の最上位ビットになるため) が、各数の他のすべての単語は考慮されるべきです符号なし数量として。
たとえば、16 ビットの 2 の補数には桁の値があります (-32768、16384、8192、4096、2048、1024、512、256、128、64、32、16、8、4、2、および 1)。2 つの 8 ビット部分に分割され、これらの部分には桁の値 (-32768、16384、8192、4096、2048、1024、512、および 256) が含まれます。および (128、64、32、16、8、4、2、および 1)。値の最初のセットは、2 の補数の 8 ビット数の 256 倍です。後者のセットは、符号なしの 8 ビット数です。