什么类型的运算符使用逻辑AND运算符(&)?
我需要输入一个简短的a
和一个"数字" m
从1到16不等,并获得另一个短b
。
那个原始类型必须是m
?
示例:
? m = ...; //with 1 <= m <= 16
short a = 2;
short b = a & m;
我见过的例子如下:
short b = a & 0xY;
如何以操作AND正确的方式将m
值翻译为Y
?
因此b
包含m
的最后a
位。
如果我使用m作为int,我将无法获得正确的结果。
我阅读了有关操作员的this页面,但没有说明这一点。
感谢。
答案 0 :(得分:0)
要从m
中获取最后a
位,您需要一个位掩码,其中最低有效m
位设置为1
,其余位设置为{{ 1}}。
你可以通过从2的幂等于2 m 减去一个,或者0
向左移1
次来得到这个。
m
E.g。如果int bitmask = (1 << m) - 1;
为m
,则4
为1 << 4
,减去一个为16
,或15
,4 0b1111
。
然后,您可以使用按位和运算符1
来获取值&
。但请注意,此运算符(以及其他)执行二进制数字提升。二进制数字促销确保使用不同类型将较窄类型加宽为与较宽类型相同的类型。但如果它们还没有b
,它也会扩展到int
。
这意味着在操作发生之前,双方都至少被提升到int
。将其转回int
。
short
请注意,由于二进制数字提升,位掩码的类型可能也是short b = (short) (a & bitmask);
。
答案 1 :(得分:0)
您根本不必将m
翻译为Y
。您只需评估a & m
。
如果您在执行此操作时遇到问题,则无法说明它是什么。您肯定忘记将结果转回short
。