代码改变世界

【二进制基础-java中byte的取值范围-推导过程】

2017-12-20 17:55  wild_cat  阅读(1419)  评论(0编辑  收藏  举报

 

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