[英]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.