为什么(52&(1 << 37))不返回0?

杰克·德隆

我正在尝试制作一个给定整数的算法,吐出其二进制形式的字符串表示形式。

现在,我基本上是在比较掩码,以查看将1/0位附加到何处。这可以正常工作,直到出现更大的数字为止,例如:(52 & (1 << 37))如果我正确理解了bitshift运算符(显然我没有),则应该返回0,因为(1 << 37)=1和37 * 0现在我上次检查时,52二进制格式的小数点第38位没有1 ,那么为什么返回32?

斯蒂芬·C

整个表达式使用32位数字执行,因为所有操作数都是int值。

因此1 << 37,不是37后跟“零”位的“ 1”。

实际上,JLS 15.9表示移位计数被掩盖了0x1f(对于32位移位运算符)。因此1 << 37实际上与...具有同一含义1 << 5; 即“ 1”后跟5个“零”位。

如果要在shift表达式中使用64位整数,则第一个操作数必须为long;。(52 & (1L << 37))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章