我读
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
还会做什么?)。