如果你不想深究你只需要知道byte代表一个字节(八位),八位二进制可以表示256个状态即2^8.
对于无符号数范围就是0~255,而对于有符号数-128~0~+127(-2^7~+(2^7-1))一共也是256个状态。
如果你想深究这个问题(毕竟我有强迫症)好奇这个-128是怎么来的,你需要先了解以下几个概念(非计算机专业勿进)
1.机器数:一个数在计算机中的二进制表示形式叫做这个数的机器数,最高位存放符号位0正1负
例:十进制 3—>二进制(八位)0000 0001
十进制-3 —>二进制(八位)1000 0001
2.真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值
3.原码、反码、补码是机器存储具体数字的编码方式
①原码:符号位加上真值的绝对值
[+1]原=0000 0001
[-1]原=1000 0001
八位二进制取值范围[1111 1111 ,0111 1111]即[-127,+127]
②反码:正数于原码相同,负数的反码是其原码基础上,符号位不变,其余各位取反
[+1]=[0000 0001]原=[0000 0001]反
[-1]=[1000 0001]原=[1111 1110]反
③补码:正数与原码相同,负数的补码是在其反码的基础上+1
[+1]=[0000 0001]原=[0000 0001]反=[0000 0001]补
[-1]=[1000 0001]原=[1111 1110]反=[1111 1111]补
4.对于有符号数原本应是-127~-0 +0~+127共256个状态但是0在数学中只有唯一代表
[+0]=[0000 0000]原=[0000 0000]反=[0000 0000]补
[-0]=[1000 0000]原=[1111 1111]反=[1 0000 0000]补
因为是八位二进制所以最高位舍弃即[-0]=[0000 0000]补。发现0在补码表示中唯一,所以计算机存储的是数的补码
下面正式介绍(-128~+127)的由来
因为第一位是符号位,所以对于正数八位二进制能代表的最大的数是[0111 1111]补,这个数翻译成十进制就是+127(正数反码补码都相同)
0的存储形式为[0000 0000]上面提到
以1开头的原码中 [-1]=[1000 0001]原 [-127]=[1111 1111]原 计算机存储中是补码
所以 —— 补码 [1111 1111]补 [1000 0001]补 即补码1000 0001~1111 1111 是表示-127~-1
这时不难发现还剩下一串补码为1000 0000的数,就把这串码表示成-128(因为正数表示不下,八位二进制最大正数为+127)
(另一种理解方式:负数的补码在机器中的算法是其绝对值各位取反再+1(不管符号位)
最小数的补码形式为1000 0000它应该是一个负数的绝对值各位取反再加一得到的
即1000 0000-1=0111 1111再各位取反1000 0000为128又因为是负数 所以[1000 0000]补所代表的数是-128
特别要注意的是-128对于八位二进制没有原码(八位二进制原码范围是[-127,+127])和反码
)综上
[1000 0000]补——[1000 0001]补——[1111 1111]补——[0000 0000]补——[0000 0001]补——[0111 1111]补
-128 -127 -1 0 +1 +127
可以把这个想象成一个循环-128的下一个数又变成了+127,就像钟表一样。