如何用二进制表示超出范围的数字?

3

在二进制补码中,根据维基百科的介绍,它的范围是从-128到127。因此我想知道,当数字超出这个范围时,我们如何用二进制补码来表示128。


(使用8个字节表示)将补码 - user188276
1
@tsubasa - 你似乎困在“2的补码”等于“8位”的想法中,但实际上并不是这样。你是否被限制使用8位? - detly
3个回答

7

你需要使用更多的位。

范围为-128到+127的唯一值有256个,即8位。如果你需要更大的范围,你需要更多的位数。

没有任何限制2s补码数字只能是8位值。例如,16位2s补码数字的范围从-32768到+32767。


但我听说过环绕术语吗?在环绕中使用更多的比特吗? - user188276
在二进制补码中,1+127=128,这个计算是允许的吗? - user188276
当一个2s补码数的最左边一位被设置时,它就是一个负数。基本上,你可以用一定数量的比特表示的数字中有一半是负数,另一半是非负数。对于任何大小的2s补码二进制数,“环绕”都是对称的。 - Mark Rushakoff
1
实际上,在2的补码中,所有位都表示-1。-127是10000000。 - Chris Dodd
是的,你说得对。我已经很久没有考虑过二进制补码了,但是快速查看维基百科页面后发现你是正确的。 - pavium

1

8位二进制可以表示的范围是:[-2^7 , 2^7-1] = [-128,127]

一般来说,使用n位的二进制补码可以表示以下范围内的数字:

-2^(n-1) to +2^(n-1)-1

-1

如果你只有8个比特可用,那么你不能这样做。除非你愿意将1000 0000同时视为负128和正128。


1
将 1000 0000 视为 -128 和 +128,你要如何区分两者之间的差异呢? - Amro
取决于上下文。如果你在做加法,你可能想允许最大结果为+128,相反地,如果你在做减法/递减,你可能想允许最小值为-128。我并没有说这一定是一个好主意,只是一个可能性。 - David R Tribble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接