byte的取值范围-128~127原理

Posted Nemo_XP

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了byte的取值范围-128~127原理相关的知识,希望对你有一定的参考价值。

我们都知道byte为8位二进制数据,最高应该是11111111,为255(10进制)。但是为什么byte的取值范围为-128~127呢?
因为不管是Int类型还是byte类型,当用二进制定义整数时候,其最高位是符号位。如此01111111代表byte范围正数的最大值127,11111111代表byte范围最小值-127才对。如此发现还是不对!

经查资料得知,计算机内存是以二进制补码的形式保存所有的数据的
原码:直接将一个数值转换为二进制数。最高位是符号位。
负数的反码:是对原码按位取反,只是最高位(符号位)确定为1。
负数的补码:其反码加1.
而正数的原码,反码,补码都相同。

观察其公式,写几个例子
正数:
+8的原码为00001000 反码为00001000 补码为00001000
+9的原码为00001001 反码为00001001 补码为00001001

负数
-9的原码为10001001 反码为11110110 补码为11110111
-8的原码为10001000 反码为11110111 补码为11111000

可得知规律值,原码,补码,不管是正数还是负数,值与补码同步加减1.

因此,计算机byte存值补码值01111111,因为正数三码合1,所以补码对应的原码数字也为01111111转为十进制是127。如果127+1,补码值同步+1,会循环到00000000值为0正数最小了。所以byte范围的最大值127。

以上可知byte范围最大值是127,那推测最小值是不是-127呢。我们拿-127去计算
原码为11111111,
反码(取反)为10000000,
补码(反码+1)为10000001
可知-127的存值补码为10000001。
根据规律可推断出-128的补码值为10000000,-129的补码值为11111111。
而拿补码11111111反推导(-1并取反)得原码为10000001,发现它其实是-1的补码,而不是-129,因此byte范围的最小值为-128。

以上是关于byte的取值范围-128~127原理的主要内容,如果未能解决你的问题,请参考以下文章

byte的取值范围是-128~127,那么包含-128和127吗?

java中为什么byte的取值范围是-128到+127

关于JAVA中Byte类型的取值范围的推论(*零为正数,-128在计算机中的表示方法...)

byte的取值范围为什么是-128~127

为什么Java byte 类型的取值范围是-128~127

Java Byte取值范围