gpt4 book ai didi

java - Java 中移位时出现奇怪的结果

转载 作者:行者123 更新时间:2023-12-01 13:08:07 25 4
gpt4 key购买 nike

我试图隔离两个相邻的字节并添加它们,但有时似乎会出现一个额外的位,我不知道如何摆脱它。它抛弃了答案。代码是:

(acc & 0x00000000ff000000L) + ((acc << 8) & 0x00000000ff000000L);

我得到的结果例如

0x0000000147000000

什么时候应该

0x0000000047000000

如何摆脱 1?

编辑:acc 很长。我尝试添加第 5 个和第 6 个字节,然后该值将进入第 5 个字节位置的新 long 值。

最佳答案

你需要在最后屏蔽掉你想要的位,因为加法可能会携带一个位:

((acc & 0x00000000ff000000L) + ((acc << 8) & 0x00000000ff000000L)) & 0x00000000ff000000L;

我认为如果你稍微分解一下,这可能会更清楚:

acc&=0x00000000FFFF000000L; // isolate bytes 5 and 4
acc+=(acc<<8); // add the two bytes (we'll strip bytes 6 & 4 next)
acc&=0x00000000FF00000000L; // reduce to byte 5 only

这也恰好少了一个按位运算。

关于java - Java 中移位时出现奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23114890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com