您的位置:首页 > 编程语言 > Java开发

java中byte的范围为何是-128--127而不是-127--127?

2017-08-09 16:07 337 查看
我来试着解释一下~

一个byte由八个位组成,如00000000,其中,前7位表示数值,第8位是符号位(0为正,1为负)。这样+1就是00000001,-1就是10000001。最大的正数就是0 1111111,即2^0+2^1+……+2^6=127;最小的负数,同理,为1 1111111,即-127。

到这里应该是许多人不明白的地方,为什么负数会到-128。这不得不崇拜伟大的印度阿三们。

上述的描述会出现一个问题,就是0,会出现一个+0和一个-0。印度人他们规定-0为-128,这样就与计算机的补码(程序都是按补码运行的)完美的结合在一起。

0x00 = 0
0x01 = 1
...
0x7f = 127
0x80 = -128 = -(128 - 0x00) = -(128 - (0x80 & 0x7f))
0x81 = -127 = -(128 - 0x01) = -(128 - (0x81 & 0x7f))
0x82 = -126 = -(128 - 0x02) = -(128 - (0x82 & 0x7f))
...
0xff = -1   = -(128 - 0x7f) = -(128 - (0xff & 0x7f))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: