一个语句中的多个按位移位

问题描述 投票:0回答:1

我正在尝试编写一个方法,它接受一个32位的int和一个整数,表示32位int中的一个字节并返回传入的字节。即getByte(0x56781234,0); // => 0x34。我的思维过程是,如果我可以将int右移到我想要的字节是int的最后一个字节的位置,我可以和它以0xFF来获取该值。所以,像,

public int getByte(int num, int byteVal) {
    return ((num >> 8) >> byteVal) & 0xFF;
}

我知道我的逻辑是有缺陷的。我试图在一个声明中多次转移。警告:没有乘法。建议吗?

java bit-manipulation
1个回答
2
投票

您希望向右移动0,8,16或24,具体取决于byteVal的值。在你的例子中,即使byteVal为0,你也已经向右移动了8,所以这不是那样的。

那么,你怎么把0/1/2/3变成0/8/16/24 ....如果只有一个可以做到这一点的换档操作!

return (num >> (byteVal << 3)) & 0xFF;
© www.soinside.com 2019 - 2024. All rights reserved.