繁体   English   中英

Java,只需一次操作即可将前3位从一个字节传输到另一个字节

[英]java, transfer first 3 bits from one byte to another in a single operation

我想将前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语句或循环的情况下,如何在单个操作中执行此操作?

注意:可能会或可能不会在oldByte中设置超出位数num 3的其他位,但是我想忽略它们。

我尝试使用newByte | = oldByte,但它会将设置的位数传送到位数3以上,这不是我想要的。

有任何想法吗?

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

会成功的 这工作,因为0b111工作作为掩模,所以只在最右边的三位oldByte已进行计算之后将保持其原有的价值; oldByte的其余位将设置为0。然后将结果分配给newByte 您需要将结果转换为byte因为按位&运算符会产生一个int ,该int大于byte ,因此必须进行转换才能正确转换。

如果要从oldByte中获取前n位而不是前3位,则可以执行以下操作:

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

n == 3时的示例:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM