标签:img png 基础 就是 概念 存储 开发人员 其他 code
作为一个java开发人员,接触的基本都是上层的,都是以应用为主,根据业务实现功能,但今天无意间发现了一个小问题,int类型的129转成byte类型变成了-127,我知道是因为位数截取的原因,但是还没有探究过为什么是-127。经了解后得以解惑。
首先要搞清楚的是计算机对数据的存储方式,在这里有两个概念大家要清楚;
1、反码:反码就是对一个二进制数据逐个取反 如1011010的反码就是0100101。
2、补码:补码很简单,就是在反码的基础上加1,比如上面的反码是0100101,那补码就是0100110
计算机对数据的存储方式是以补码的形式存储的,正数的反码和补码都是他的源码,是不不变的,负数的反码补码算法就是上面的1和2规则,且存储的时候高位为符号位,1表示负数,0表示正数。
现在回到我们问题本身来:
129的二进制是010000001,高位为0是正数,转成byte后,应该byte的长度为8位,所以截取了后面8位,变成了10000001,高位就变成了1成了负数,在存储的时候先取反码,取反码时符号位是不变的 即:111111110,补码就是11111111,高位符号位不参与运算,其他的位数算出来是127加上符号就是-127,疑惑解答,希望也可以能让各位亲解惑
标签:img png 基础 就是 概念 存储 开发人员 其他 code
原文地址:https://www.cnblogs.com/GX1234/p/11699635.html