码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-10-18 19:11:01      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:img   png   基础   就是   概念   存储   开发人员   其他   code   

作为一个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了?

标签:img   png   基础   就是   概念   存储   开发人员   其他   code   

原文地址:https://www.cnblogs.com/GX1234/p/11699635.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!