我想知道如果有两个n位二进制数相乘,是否有任何公式或方法可以找出更多的最大位。 我搜索了很多,但无法在任何地方找到答案。
答案 0 :(得分:9)
可以使用示例简单地得出结论:
11 * 11(因为11是最大2位数)= 1001(4位)
111 * 111 = 110001(6位)
1111 * 1111 = 11100001(8位)
11111 * 11111 = 1111000001(10位)
从上面我们可以看到你的答案是2 * n
答案 1 :(得分:8)
表示数字N所需的基数B的位数是floor(log_B(N)+1)。 Logarithm有一个很好的属性log(X * Y)= log(X)+ log(Y),它暗示X * Y的位数大致是表示X和Y的位数之和。
答案 2 :(得分:7)
考虑这一点的最简单方法是考虑产品的最大值,这是在我们使用两个被乘数的最大值时获得的。
如果值x
是n位数,则最多为2 ^ n - 1.想想看,2 ^ n需要一个后跟n个零。
因此,两个n位数的最大可能乘积是:
(2 ^ n - 1)^ 2 = 2 ^(2n) - 2 ^(n + 1)+ 1
现在n = 1是一种特殊情况,因为1 * 1 = 1再次是一位数。但是通常我们看到,当n> 1时,最大乘积是2n位数。例如如果n = 3,则最大被乘数为x=7
,方形49为6位数。
答案 3 :(得分:3)
值得注意的是,位置系统的基础并不重要。无论你为十进制乘法得出什么公式都适用于二进制乘法。
让我们应用一点推论并将两个具有相对素数的数字相乘:分别为2位和3位。
最小的数字:
10 * 100 = 1000有4位
最大可能的数字:
99 * 999 = 98901有5位
因此,对于n位乘以m位数,我们推断出上限和下限分别为n+m
和n+m-1
位。让我们确保它也适用于二进制文件:
10 * 100 = 1000有4位
11 * 111 = 10101有5位
所以,它确实适用于二进制,我们可以期望它适用于任何基础。
答案 4 :(得分:1)
x具有n个二进制数字意味着2 ^(n-1)< = x< 2 ^ n,也假设y有m个二进制数字。这意味着:
2^(m+n-2)<=x*y<2^(m+n)
因此x * y可以有m + n-1或m + n个数字。很容易构建两种情况都可能的例子: