byte类型的数在JAVA中占1个字节,也就是8位,那么8位中除去一个符号位,表示数值的共有七位。
例如:1000 0000 中1就是符号位,表示负数。
0111 1111 中0也是符号位,表示正数。
剩余7位表示数值,根据二进制的计算方法,byte8位一共可以表示-128~127。
为什么正数只能表示到127,而负数可以表示到-128呢?
这涉及到了0的问题
1000 0000 按照之前的规定来看,首位1代表符号位,说明是负数,后7位代表数值0。这样看来,1000 0000就代表了-0这个数。
0000 0000 同理,按照之前的规定来看,首位0代表符号位,说明是负数,后7位代表数值0。这样看来,1000 0000就代表了+0这个数,0这个数是不需要使用2种正负去表示的,+0和-0这样就浪费了一个表示数值。所以规定1000 0000代表-128,第一位不止是符号位了,或者说,规定1000 0000就是-128,这样就导致了我们可以表示-128~127的数,正数比负数可以表示的数少一,就少在了这个-0上。
再说溢出问题
byte a = 127;
byte b