我读
Why is the range of bytes -128 to 127 in Java?
它说



所以得出结论-128是10000000

所以+128不能用8位2的补码表示,但这意味着我们可以用9位表示它,所以128是010000000,因此取其2的补码-128就是110000000,

那么-128 10000000或110000000的表示形式是什么?
代表位是否相关?

为什么不简单地使较低的范围-127 fot 8位而不是将-128写为10000000?

最佳答案



不是。一个无符号字节(假设为8位)是从0到255。

直接由2's complement定义,使用2的补码表示的有符号字节的范围是-128至127:

01111111 = +127
01111110 = +126
01111101 = +125
...
00000001 = +1
00000000 =  0
11111111 = -1
...
10000010 = -126
10000001 = -127
10000000 = -128



在8位中,它是10000000,在假设的9位表示中,它是110000000



人为地将范围限制为-127并不会取得太大效果;您将不允许使用完全有效的值,并且通常会使代码更复杂(使用位模式10000000还会做什么?)。

10-04 20:12