我正在尝试制作一个给定整数的算法,吐出其二进制形式的字符串表示形式。
现在,我基本上是在比较掩码,以查看将1/0位附加到何处。这可以正常工作,直到出现更大的数字为止,例如:(52 & (1 << 37))
如果我正确理解了bitshift运算符(显然我没有),则应该返回0,因为(1 << 37)
=1
和37 * 0
。现在我上次检查时,52
二进制格式的小数点第38位没有1 ,那么为什么返回32?
整个表达式使用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] 删除。
我来说两句