gpt4 book ai didi

java - 让给定范围的位更有效?

转载 作者:行者123 更新时间:2023-11-30 03:42:31 25 4
gpt4 key购买 nike

我已经有一段时间进行位操作了,我不确定这是否可以以更有效的方式完成。

我想要的是从一个值中获取特定范围的位。
假设该值的二进制为:0b1101101

现在我想以二进制补码形式获取该值的第 2 位到第 5 位的 4 位范围。
我想要得到的范围:0b1011
二进制补码值:-5

这是我的代码,以及我正在做的一些想法:

public int bitRange(int value, int from, int to) {

// cut the least significant bits
value = value >> from;

// create the mask
int mask = 0;
for (int i = from; i <= to; i++) {
mask = (mask << 1) + 1;
}

// extract the bits
value = value & mask;

// needed to check the MSB of the range
int msb = 1 << (to - from);

// if MSB is 1, XOR and inverse it
if ((value & msb) == msb ) {
value = value ^ mask;
value = ~value;
}

return value;

}

现在我想知道这样是否可以做得更有效?特别是动态掩码的创建和范围的 MSB 检查,以便能够转换位范围。另一点是,正如 user3344003 正确指出的那样,如果范围是 1 位,则输出将为 -1。我确信还有可能的改进。

最佳答案

对于你的面具,你可以这样做

int mask = 0xffffffff >> 32-(to-from);

尽管该代码准确正确的可能性很小。可能相差一位,边缘问题,标志问题。但这是在正确的轨道上吗?

关于java - 让给定范围的位更有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26500800/

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