java中用补码表示二进制数,补码的最高位是符号位,最高位为“0”表示正数,最高位为“1”表示负数。
正数补码为其本身;
负数补码为其绝对值各位取反加1;
例如:
+21,其二进制表示形式是0001 0101,则其补码同样为0001 0101
-21,按照概念其绝对值为0001 0101,各位取反为1110 1010,再加1为1110 1011,即-21的二进制表示形式为1110 1011
byte范围推导步骤:
【思考】正向思路为,算出数值的源码——>数值的补码;而java数值存储一补码存储,那么我们就要以数值的补码——>数值的源码——>算出数值。
1、byte为一字节8位,最高位是符号位,即最大值是0111 1111(补码),因正数的补码是其本身,即此正数源码为0111 1111(源码),十进制表示形式为127,
2、最大正数是0111 1111,那么最大的负数是1111 1111(补码),源码为补码减1为1111 1110 然后取反为0000 0001即源码数值为 1,加上补码最高位的符号表示,即为 -1.
3、1000 0000是最小负数的补码表示形式,我们把补码计算步骤倒过来就即可。1000 0000减1得0111 1111然后取反1000 0000,因为负数的补码是其绝对值取反,即1000 0000为最小负数的绝对值,而1000 0000的十进制表示是128,所以最小负数是-128.
4、由此可以得出byte的取值范围是-128到+127
本文参考http://bbs.itheima.com/thread-136511-1-1.html