如果我将两个 16 位数字相乘,结果将是 32 位长。但为什么会这样呢?对此有什么明确的解释?
对于我的正确理解:计算是:n 位数乘以 m 位数得到 (n+m) 位数?
如果我将两个 16 位数字相乘,结果将是 32 位长。但为什么会这样呢?对此有什么明确的解释?
对于我的正确理解:计算是:n 位数乘以 m 位数得到 (n+m) 位数?
(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,因此将 n 位数字乘以任意基数b中的 m 位数字会得到 a最多 n+m 个数字
您可以在基数 10 中轻松看到:9*9 = 81(1 位 * 1 位 = 2 位)或99*99 = 9801(2 位 * 2 位 = 4 位)
为简单起见,让我们采用无符号二进制数。使用 n 个二进制数字,您可以表示 2^n 个不同的数字,范围从零到 2^n-1。将 n 位二进制数与 m 位二进制数相乘时,结果将是一个介于零和 (2^n-1) * (2^m-1) = 2^(n+m) - 2 之间的数^n - 2^m + 1,通常仅略小于 2^(n+m)-1。要表示这样一个范围的结果,您需要 n+m 个二进制数字。