符号拡張を用いた符号ビット付き2進数の掛け算

nビットの符号ビット付き2進数同士の掛け算において、2nビットに符号拡張してから掛け算を行うと、すべての答えを表現できます。

例えば、4ビットの符号ビット付き2進数a_[[3]]a_[[2]]a_[[1]]a_[[0]]b_[[3]]b_[[2]]b_[[1]]b_[[0]]の掛け算は、符号拡張すると、以下のようになります。

a_[[3]]a_[[3]]a_[[3]]a_[[3]]a_[[3]]a_[[2]]a_[[1]]a_[[0]]×b_[[3]]b_[[3]]b_[[3]]b_[[3]]b_[[3]]b_[[2]]b_[[1]]b_[[0]]

符号拡張しても値は変化しないのと、2の補数の掛け算より、8ビットの符号ビット付き2進数同士の掛け算は、答えが8ビットであるため、a_[[3]]a_[[2]]a_[[1]]a_[[0]]×b_[[3]]b_[[2]]b_[[1]]b_[[0]]の答えをすべて表現できます。

8ビットの符号ビット付き2進数で表現できる値の範囲は、10進数でー128~127です。上記のように符号拡張した4ビットの符号ビット付き2進数同士の掛け算の答えの範囲は、ー56~64なのでー128~127の範囲に入っています。

実例

例えば、4ビットの符号ビット付き2進数1101(10進数でー3)と0101(10進数で5)の掛け算を符号拡張して、2の補数の掛け算と同じ方法で計算してみます。

         11111101
       × 00000101
       ----------
+        11111101  (11111101×1の結果)
+       00000000   (11111101×0の結果)
+      11111101    (11111101×1の結果)
+     00000000     (11111101×0の結果)
+    00000000      (11111101×0の結果)
+   00000000       (11111101×0の結果)
+  00000000        (11111101×0の結果)
+ 00000000         (11111101×0の結果)
-----------------
  000010011110001  (上記の8つの結果の足し算)

答えは、赤字の11110001(10進数でー15)です。