我们知道java中基本类型byte占8 bits,取值范围是-128到最+127,从这个正负号大家也能看出表示这个范围的二进制数是有符号位的,就是第一位。
比如+127是 0111 1111 而 -128是 1000 0000
正数好理解,负数是通过原码取反后+1 生成的补码表示
比如-3的 源码是 1000 0011 反码是 1111 1100 补码是 1111 1101
计算机得到 1111 1101 后经过计算就知道是-3了。
然而这么算的话,最小的负数应该是 -127,原码为:1111 1111,补码为 1000 0001 ,为什么会是 -128 呢?
来看0这个数字如何表示,
- 一个 +0 0000 0000
- 一个 -0 1000 0000 ?
而数学只有一个0,就把 0000 0000表示为0,多出的这个一个补码 1000 0000 人为规定为 -128!
同理,其他边界值比如int的 最小值-231 也是一个道理。
下面是一道很有意思的小题,大家可以试一下,以下是java代码:
byte i =127; System.out.println(++i);
btw
一直以来IDEA启动就比较慢(不算项目加载时间,单纯软件的启动时间),不爽它很久了,于是决定优化它,结果发现无论我怎样优化它的软件启动时间都在10秒(不知道正版的用户是不是这样的),据IDEA官方介绍它的2019版本启动时间会更快。