gpt4 book ai didi

java,在单个操作中将前 3 位从一个字节传输到另一个字节

转载 作者:行者123 更新时间:2023-12-01 16:57:15 25 4
gpt4 key购买 nike

我想将前 3 位从一个字节传输到另一个字节。目前我使用以下命令,但它太慢了(不正确的分支预测会减慢速度)>

    byte newByte = 0;
if(((oldByte >> 0)&1) == 1) newByte |= 1 << 0;
if(((oldByte >> 1)&1) == 1) newByte |= 1 << 1;
if(((oldByte >> 2)&1) == 1) newByte |= 1 << 2;

如何在不使用 if 语句或循环的情况下在单个操作中执行此操作?

注意:第 3 位之外的其他位可能会也可能不会在 oldByte 中设置,但我想忽略它们。

我尝试使用 newByte |= oldByte 但它传输的设置位超出了第 3 位,这不是我想要的。

有什么想法吗?

最佳答案

byte newByte = (byte) (oldByte & 0b111);

就可以了。这是有效的,因为 0b111 用作掩码,因此在执行计算后,只有 oldByte 中最右边的三位会保留其原始值; oldByte 中的其余位将被设置为 0。然后结果将被分配给 newByte。您需要将结果转换为 byte,因为按位 & 运算符生成 int,它大于 byte,因此必须进行转换正确转换。

如果你想从 oldByte 中获取前 n 位而不是前 3 位,你可以这样做:

byte newByte = (byte) (oldByte & ((1 << n) - 1));

n == 3 时的示例:

(1 << n) - 1
(1 << 3) - 1
0b1000 - 1
0b111

关于java,在单个操作中将前 3 位从一个字节传输到另一个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31063662/

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