n位2补码二进制数乘法:需2n位结果的特殊情况问询
唯一需要2n位存储的2补码乘法情况
这个问题其实挺有意思的,咱们先从n位2补码的范围说起:n位2补码能表示的数是从 -2^(n-1) 到 2^(n-1)-1。
那什么时候两个n位2补码相乘的结果必须用2n位才能装下呢?答案就是:当两个乘数都是n位2补码中的最小负数,也就是 -2^(n-1) 的时候。
咱们举个具体例子,比如n=2:
- 2位2补码的最小负数是
-2(二进制是10) - 它乘以自己:
(-2) * (-2) = 4 - 2n=4位的2补码可以表示4(二进制
0100),但如果用少于4位的话,比如3位2补码,最大只能表示到3(011),根本装不下4。
为什么这是唯一的情况?咱们来捋一捋:
- 其他所有n位2补码组合的乘积,绝对值最大的情况是
(2^(n-1)-1) * (2^(n-1)-1) = 2^(2n-2) - 2^n + 1,这个值比(-2^(n-1))^2 = 2^(2n-2)要小。 - 而如果用少于2n位的存储(比如2n-1位),它的最大正数是
2^(2n-2)-1,刚好比2^(2n-2)小1,所以只有这一种情况的乘积会超出短位数的存储范围,必须用2n位才能装下。
说白了,就是两个n位2补码里最“极端”的那个负数相乘,得到的结果刚好卡在了短位数存储的上限之外,其他任何组合的乘积都能在更少的位数里容纳。
内容的提问来源于stack exchange,提问作者Navid
相关产品推荐
相关产品推荐

