数値を正に変換して - X - = + のようにしようとは言わないでください。
数は -3 (101)
-3 × -3 = +9
この合計はバイナリでどのように行うことができますか?
ありがとう。
通常、負の整数は 2 の補数表現で格納されます。つまり、m ビットの数値 -x は 2 m -x として格納されます。これが2 の補数という名前の由来です。x を足すと完全な 2 のべき乗になります。
32 ビットを使用すると仮定すると、-3 は 2 32 -3 = 4294967293 として格納されます。
つまり、-3 × -3 = 4294967293 × 4294967293 = 18446744047939747849 ですが、この数は 32 ビットに収まりません。オーバーフローし、最後の 32 ビットが残ります。これらのビットは、自然に数字の 9 をエンコードします。
バイナリで見たいですか?Ok。-3 は 2 32です -3 は 1111111111111111111111111111101 2です。
11111111111111111111111111111101×11111111111111111111111111111101 =
1111111111111111111111111111101000000000000000000000000000001001
(32 msb) (32 lsb)
結果の下位 32 ビットは 0000000000000000000000000001001 2で、これは数値 9 です。
2 の補数で表される値の乗算を実行するメソッドを探しているようです...
ウィスコンシン大学の Karen Miller によるこのWeb ページでは、最初に数値を逆数に変換する必要のない方法を含め、これらの方法のいくつかを提供しています。