首先需要明确,java是使用补码来表示二进制数的,在补码中,最高位为符号位,0表示正,1表示负。
例如:10 的原码为 000 010 10 ,(正数的原码、反码、补码都一样); 红色的0(符号位)表示该数是正数
-10的原码为 100 010 10,反码 111 101 01(负数的反码是除符号位的数取反(0变成1,1变成0,符号位不变)),补码111 101 10(反码加1,符号位会变)
byte占8bit位,先考虑正数的取值范围,000 000 00~011 111 11,正数的原码反码都一样,所以取值范围为 0 ~ 127,
再考虑负数的取值范围,100 000 00 ~ 111 111 11 反码为 111 111 11 ~ 100 000 00 补码为 1100 000 00 ~ 100 000 01 ,取值范围为-128 ~ -1(符号位)
所以,byte的取值范围就是-128 ~ 127 了。