Int类的129为什么转成byte就变成-127了?

Posted gx1234

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Int类的129为什么转成byte就变成-127了?相关的知识,希望对你有一定的参考价值。

作为一个java开发人员,接触的基本都是上层的,都是以应用为主,根据业务实现功能,但今天无意间发现了一个小问题,int类型的129转成byte类型变成了-127,我知道是因为位数截取的原因,但是还没有探究过为什么是-127。经了解后得以解惑。

技术图片

 

首先要搞清楚的是计算机对数据的存储方式,在这里有两个概念大家要清楚;

1、反码:反码就是对一个二进制数据逐个取反 1011010的反码就是0100101

2、补码:补码很简单,就是在反码的基础上加1,比如上面的反码是0100101,那补码就是0100110

 

计算机对数据的存储方式是以补码的形式存储的,正数的反码和补码都是他的源码,是不不变的,负数的反码补码算法就是上面的12规则,且存储的时候高位为符号位,1表示负数,0表示正数。

现在回到我们问题本身来:

 

129的二进制是010000001高位为0是正数,转成byte后,应该byte的长度为8位,所以截取了后面8位,变成了10000001,高位就变成了1成了负数,在存储的时候先取反码,取反码时符号位是不变的 即:111111110,补码就是11111111,高位符号位不参与运算,其他的位数算出来是127加上符号就是-127,疑惑解答,希望也可以能让各位亲解惑

 

以上是关于Int类的129为什么转成byte就变成-127了?的主要内容,如果未能解决你的问题,请参考以下文章

自学Java-运算符

【PHP】值为1的string类型,转成int类型后值变成了0?

byte和int,char类型有啥区别

java byte&0xFF

(byte)129输出值

java 将Object转成List