web-dev-qa-db-ja.com

2つの補数の乗算と整数の除算を行う方法

私はこれを2の補数を使用したバイナリ乗算について post で読みました。しかし、それは私にはあまり明確ではありません。これについて wiki の記事を理解することさえ困難です。負の数の乗算の計算方法について知りたい:

eg: -1 with -7 should give 7.
A 4-bit, 2's complement of -1 is : 1111
A 4-bit, 2's complement of -7 is : 1001

乗算を計算するいくつかの段階的な方法が役立ちます。分割についての話に出くわした記事はありません。これにどのように取り組みますか?

15
eagertoLearn

ステップ1: sign extend両方の整数から2倍のビット。これは安全ですが、常に必要なわけではありません。

for 4-bit --> 1111, you would extend as 1111 1111
for 4-bit --> 0111,you would extend as 0000 0111

ステップ2:基本乗算を行う

9月3日:結果の最下位部分から正しい数の結果ビットを取得します。

例:乗算後、最終的には0010011110最後の8ビット、つまり10011110

あなたが提供した例で説明しましょう:-1 X -7 4ビット表現

         1111 1111        -1
       x 1111 1001     x  -7
      ----------------    ------
          11111111         7
         00000000
        00000000
       11111111
      11111111
     11111111
    11111111
   11111111
   ----------------
1  00000000111       --->  7 (notice the Most significant bit is zer``o)
      --------  (last 8-bits needed) 

あなたはより多くの詳細を得ることができます ここ ;

除算の場合:正に変換し、計算後に符号を調整します。これは演習のままにしますが、これを参照することもできます page

11
brain storm

わかりました、これをあなたのために十分に単純にできるか見てみましょう。

2の補数:IFF(ある場合のみ)に負の数がある場合は、最初にそれを正の形式にします。簡単にするために、すべての数値は6ビットになります。ビットの制限は、あなたの数字がどれだけ大きくなるかを制限します。それ以外に、サイズは何でもかまいません。

一部の数値は正のバイナリ形式に変換されます-7:000111 16:010000 -22:010110 1:000001

-7と-23の場合のみ、2の補数を実行します。したがって、ビットを反転させ(1-> 0 && 0-> 1)、1を追加します。

 000111
 Goes to the complement + 1
 111000
 +    1
=111001

そして22のために

 010110
 Goes to the complement + 1
 101001
+     1
=101010

次に、他の番号と同じように、それらを一緒に追加します。

そして、誰かがすでに乗算部分をカバーしているように見えるので、私はそれを繰り返すことはしません。

4
David