1

皆さん、こんにちは。

これが本当にばかげていることは知っていますが、次の操作を手動で行う方法について少し混乱しています。

0.25~0.5? または同様の質問

また、符号付き固定小数点数については、どのように減算しますか?

以下に示すように、MSB を符号に選択し、8 ビット数の 7 番目のビットを 1 に選択し、ビット 6 から 0 を小数部にするとします。

[SIGN][2^0][2^-1][2^-2][2^-3][2^-4][2^-5][2^-6]

たとえば、01.100000 は 10 進数で 1.5 です。

小数点を揃える場合、1+0.25 と言うと簡単に追加できます。

01.000000 +00.010000 =01.010000 = 10 進数で 1.25

しかし、どうすれば 0.25-1 になるでしょうか? または -0.25-1?

あなたが助けてくれることを願っています!

4

1 に答える 1

3

ここで行ったように、符号と大きさの表現を使用すると、問題が非常に複雑になります (また、すべてゼロの「通常のゼロ」とは別の「負のゼロ」を表すビット パターンが必要になります)。これは確かに実行可能な表現ですが、お気づきのように、操作はかなり複雑です。

最上位ビットが次の最上位ビットの 2 倍の大きさの負の値 (この場合は -2^1) を表す 2 の補数表現を使用すると、加算と減算をまったく同じように実行できるため、問題が大幅に簡素化されます。両方の番号が署名されていない場合。そのような表現では、例えば:

 0.25 = 00 010000
-1.00 = 11 000000
      -----------
        11 010000 = -0.75

-0.25 = 11 110000
-1.00 = 11 000000
      -----------
        10 110000 = -1.25

符号の大きさの表現から 2 の補数に変換するには、次のようにします。

  • 数値が正の場合は、そのままにしておきます。
  • 数値が負の場合、符号ビット以外のすべてのビットを反転し、1 を追加します (符号なし加算を使用)。

たとえば、-0.75 の符号と大きさの表現を 2 の補数に変換するには、次のようにします。

Sign/magnitude: 10 110000
        Invert: 11 001111
            +1: 11 010000 -> two's complement

逆方向に変換するには、プロセスを逆にします (1 を引いてから反転します)。

于 2012-12-22T05:39:22.617 に答える