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

时间:2018-09-12 02:42:27

标签: java bit-manipulation

我正在尝试编写一个方法,该方法接受32位int和表示32位int中字节的整数,并返回传入的字节。即getByte(0x56781234,0); // => 0x34。我的思考过程是,如果我可以将int右移到我想要的字节是int的最后一个字节的位置,则可以将其与0xFF进行“与”运算以获得该值。像这样

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

我知道我的逻辑有缺陷。我试图在一个语句中多次移动。注意:没有乘法。咨询吗?

1 个答案:

答案 0 :(得分:2)

您要根据byteVal的值向右移动0、8、16或24。在您的示例中,即使byteVal为0,您已经向右移动了8位,所以不是这样。

那么,如何将0/1/2/3转换为0/8/16/24 ....如果只有一个移位操作可以做到这一点!

return (num >> (byteVal << 3)) & 0xFF;