网上关于解答的版本有很多,综合对比了一下,找到一个很好理解的版本,总结一下,希望能帮到后来的人,原文链接不记得了,仅做学习之用,侵删。
byte类型数字占一个字节,也就是8位,类似下面8个只能存储0或1的格子。
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
首先说一下数据存储的问题,计算机中的数据是以其补码的形式储存的,引入三个概念:源码、反码、补码。
正数的源码、反码、补码都一样,举个例子 数字5 源码为 0000 0101 反码 补码都是 0000 0101 所以,数字5在计算机中存储的形式就是:0000 0101。
负数的反码是数字本身绝对值的源码全部取反 以 -5举例,-5的源码是 1000 0101, 绝对值的源码是 0000 0101 ,全部位取反的结果是:1111 1010,补码是反码的基础+1,为 1111 1011,所以,-5在计算机中的储存形式是 1111 1011。
接下来,byte首位可以理解成符号位,0代表整数,1代表负数。
所以,整数的表示范围为 0000 0000——0111 1111,换算成十进制就是 0——127
负数的表示范围 1000 0000 —— 1111 1111 。这里分别反推一下,1000 0000是补码,反码就是-1,是0111 1111,所求数绝对值的源码是 1000 0000 ,转化十进制再加负号结果是 -128。1111 1111是补码,反码就是 1111 1110,所求数绝对值的源码就是0000 0001,转化为十进制再加负号结果是-1,所以,范围是 -128—— -1。
综上所述,byte表示的范围就是[-128,127]。