两个16位数的乘法 - 为什么结果是32位长?

时间:2014-01-28 21:04:15

标签: assembly binary multiplication bits integer-arithmetic

如果我将两个16位数相乘,结果将是32位长。但为什么会这样呢? 对此有什么明确的解释?

为了我正确的理解: 对此的计算是:n位数乘以m位数给出(n + m)位数?

2 个答案:

答案 0 :(得分:5)

  

(2 n - 1)*(2 m - 1)= 2 n + m - 2 n - 2 m + 1

- (2 n + 2 m 就像清除索引 n m ,与2 n + m 相比,对结果影响不大,因此需要n + m位来表示结果。

例如 1111 2 * 1111 2 = 11100001 2 (15 * 15 = 225)

一般来说,(b n - 1)*(b m - 1)= b n + m - b n - b m + 1 ,因此在任意基数 b 结果中将n位乘以m位数在最多n + m位的数字

您可以在基数10中轻松看到: 9 * 9 = 81 (1位* 1位= 2位数)或 99 * 99 = 9801 (2位数) * 2位= 4位数)

答案 1 :(得分:0)

为简单起见,我们采用无符号二进制数。使用n个二进制数字,您可以表示2 ^ n个不同的数字,范围从0到2 ^ n-1。当将n位二进制数乘以m位二进制数时,结果将是0到(2 ^ n-1)*(2 ^ m-1)= 2 ^(n + m) - 2之间的数字。 ^ n - 2 ^ m + 1,其通常仅略小于2 ^(n + m)-1。要表示这样的结果范围,您需要n + m个二进制数字。