从Int获得n个最低有效位

Win*_*dom 12 java bit-manipulation

这似乎相当简单,但我找不到答案.如果我有一个int X,那么从Java中获取N个最低有效位的最佳方法是什么?

Ted*_*opp 13

这适用于所有非负N < 33 32:

x & ((1 << N) - 1)
Run Code Online (Sandbox Code Playgroud)

这是对如何工作的价值阐述N == 31 N == 32.因为N == 31,我们得到1 << N == Integer.MIN_VALUE.当你从中减去1时,Java会默默地回绕Integer.MAX_VALUE,这正是你所需要的.因为N == 32,1位完全移出,所以1 << N == 0; 然后(1 << N) - 1 == -1,这是所有32位设置.

因为N == 32,不幸的是,这不起作用,因为(谢谢,@ zstring!)<<操作员只移动右侧的模块32.相反,如果你想避免专门测试那个案例,你可以使用:

x & ((int)(1L << N) - 1)
Run Code Online (Sandbox Code Playgroud)

通过移动a long,您可以获得完整的32位移位,在转换为a之后int,获得0.减去1给出-1并且x & -1x用于任何intx(并且x是低32位的值x).