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 == 32N == 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 & -1仅x用于任何int值x(并且x是低32位的值x).