java int在那个包_java – 使用按位运算符在一个int中打包多个值

正如评论所说,我们将把年龄,性别和身高包装成15位,格式如下:

AAAAAAAGHHHHHHH

从这部分开始:

(age << 8)

要开始,年龄有这种格式:

age = 00000000AAAAAAA

其中每个A可以是0或1。

<< 8将位8移动到左边,并用零填充空位。所以你得到:

(age << 8) = AAAAAAA00000000

类似地:

gender = 00000000000000G

(gender << 7) = 0000000G0000000

height = 00000000HHHHHHH

现在我们要将它们组合成一个变量。 |运算符通过查看每个位进行工作,如果任一输入中的位为1,则返回1。所以:

0011 | 0101 = 0111

如果一个输入中的位为0,则从另一个输入中获取位。看看(年龄<< 8),(性别<< 7)和身高,你会看到,如果其中一个有一个为1,其他人为0。所以:

packed_info = (age << 8) | (gender << 7) | height = AAAAAAAGHHHHHHH

现在我们要打开这些位。我们从高处开始吧。我们想要得到最后的7位,忽略第8位。为此,我们使用&运算符,只有当两个输入位都为1时,它才返回1。所以:

0011 & 0101 = 0001

所以:

packed_info = AAAAAAAGHHHHHHH

0x7F = 000000001111111

(packed_info & 0x7F) = 00000000HHHHHHH = height

为了达到这个年龄,我们可以把所有8个地方都推到右边,剩下0000000AAAAAAAA。所以age =(packed_info>> 8)。

最后,为了获得性别,我们把所有7个地方都放在右边,摆脱高度。然后我们只关心最后一点:

packed_info = AAAAAAAGHHHHHHH

(packed_info >> 7) = 0000000AAAAAAAG

1 = 000000000000001

(packed_info >> 7) & 1 = 00000000000000G

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值