Java 二进制AND运算符的操作数类型

Java 二进制AND运算符的操作数类型,java,bit-manipulation,bitwise-operators,bitwise-and,Java,Bit Manipulation,Bitwise Operators,Bitwise And,什么类型的运算符使用逻辑AND运算符(&)? 我需要输入一个短的a和一个从1到16不等的“数字”m,然后获得另一个短的b。 该基元类型的值必须是m 例如: ? m = ...; //with 1 <= m <= 16 short a = 2; short b = a & m; 如何将m值转换为Y,以确保操作和正确? 因此b包含a的最后m位 如果使用m作为int,则无法获得正确的结果 我读过关于运营商的页面,但它并没有说什么 谢谢。要从a中提取最后的m位,您需要一个位掩码,将

什么类型的运算符使用逻辑AND运算符(&)? 我需要输入一个短的
a
和一个从1到16不等的“数字”
m
,然后获得另一个短的
b
。 该基元类型的值必须是
m

例如:

? m = ...; //with 1 <= m <= 16
short a = 2;
short b = a & m;
如何将
m
值转换为
Y
,以确保操作和正确? 因此
b
包含
a
的最后
m

如果使用m作为int,则无法获得正确的结果

我读过关于运营商的页面,但它并没有说什么


谢谢。

要从
a
中提取最后的
m
位,您需要一个位掩码,将最低有效
m
位设置为
1
,其余设置为
0

您可以通过从等于2m的2的幂中减去1,或将
1
左移
m
次来获得此值

int bitmask = (1 << m) - 1;

请注意,由于二进制数字提升,位掩码的类型也可能是
int

您根本不必将
m
转换为
Y
。您只需评估
a&m

如果您在执行此操作时遇到问题,则说明您没有说明问题所在。您肯定忘了将结果转换回
short

short b = (short) (a & bitmask);
short b = (short) (a & bitmask);