黑马程序员技术交流社区

标题: 为什么java中Byte类型的取值范围是-128~127? [打印本页]

作者: 小菜鸟。    时间: 2016-5-10 18:08
标题: 为什么java中Byte类型的取值范围是-128~127?
java中Byte的取值范围-128~127一直没理解。
127好理解,Byte占一个字节8位,首位是符号位,最大值为0111 1111即127。
关键是-128,首位是符号位,那就是剩余的7位表示真值,最大为111 1111,最小为000 0000,那最小即为1000 0000,就是-128。
但不是说好首位是符号位了么?怎么负数算真值得时候又把首位1 给算进去了?
求解释。
作者: 冯领峰    时间: 2016-5-10 18:19
这个,知道就行了,没必要纠结原因吧,java有一整套的规定,你不可能知道所有的原因
作者: success560    时间: 2016-5-10 18:21
没有--0 只有一个0,
作者: 小菜鸟。    时间: 2016-5-10 19:48
冯领峰 发表于 2016-5-10 18:19
这个,知道就行了,没必要纠结原因吧,java有一整套的规定,你不可能知道所有的原因 ...

但是不搞明白觉得很难受啊,
作者: 小菜鸟。    时间: 2016-5-10 19:51
success560 发表于 2016-5-10 18:21
没有--0 只有一个0,

{:3_65:}额,
作者: ziyouxin    时间: 2016-5-10 21:41
同问,想不通心里很难受啊

作者: 新晋猿工    时间: 2016-5-10 21:42
1、byte为一字节8位,最高位是符号位,即最大值是01111111,因正数的补码是其本身,即此正数为01111111
十进制表示形式为127
2、最大正数是01111111,那么最小负是10000000(最大的负数是11111111,即-1)
3、10000000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。10000000减1得01111111然后取反10000000
因为负数的补码是其绝对值取反,即10000000为最小负数的绝对值,而10000000的十进制表示是128,所以最小负数是-128
4、由此可以得出byte的取值范围是-128到+127
5、说明:各个类型取值范围的计算方法与此大致相同,感兴趣的同学可以自己试着计算

作者: wh19900105    时间: 2016-5-10 22:08
128就是传说中的-0




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2