java中byte转int时候为什么要&0xff

首先先了解

byte 是8位 取值范围是-128~127

int    是32位

补码、反码、原码

补码 :原码的反码+1

反码 :原码除符号位以外的全部取反 既0变1 1变0

以上是负数的补码,正数的补码是它本身

在计算机中负数是用补码表示的,为什么用补码呢

计算机为什么使用补码来存储数据

byte最高位表示正负,也就是符号位,1为负,0为正数。而计算机存储负数的时候是用补码的形式的。

主题来了,为啥byte转int时候要&0xff呢

因为byte再转int的时候,自身会按照符号位高位补24位

如-127 补码是10000001

为了转int

11111111 11111111 11111111 10000001

这个补码和原来的已经不一致了,虽然这样子的int转回byte还是10000001(int转byte会去掉高位的24位),但为了保证补码的一致所以&0xfff

1111111111111111111111111 10000001&11111111=000000000000000000000000 10000001

这样子因为0会被忽视掉,所以补码还是10000001

同理byte转其他也是这样子的。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值