私はこれを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
乗算を計算するいくつかの段階的な方法が役立ちます。分割についての話に出くわした記事はありません。これにどのように取り組みますか?
ステップ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 。
わかりました、これをあなたのために十分に単純にできるか見てみましょう。
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
次に、他の番号と同じように、それらを一緒に追加します。
そして、誰かがすでに乗算部分をカバーしているように見えるので、私はそれを繰り返すことはしません。