我确定这对任何人来说都是一件容易的事!
为什么在Java中代码像
long one = 1 << 0; long thirty = 1 << 30; long thirtyOne = 1 << 31; long thirtyTwo = 1 << 32; System.out.println(one+" = "+Long.toBinaryString(1 << 0)); System.out.println(thirty+" = "+Long.toBinaryString(1 << 30)); System.out.println(thirtyOne+" = "+Long.toBinaryString(1 << 31)); System.out.println(thirtyTwo+" = "+Long.toBinaryString(1 << 32));
打印
1 = 1 1073741824 = 1000000000000000000000000000000 -2147483648 = 1111111111111111111111111111111110000000000000000000000000000000 1 = 1
这对我来说没有意义。long是一个64位数字-而它看起来像int上面的一个。我知道bitshifted bytes会进行int提升,但是在这种情况下我看不到发生了什么。
long
int
byte
任何关于这里发生的事情的指针都将是很好的:)
谢谢
编辑 :感谢所有的答案-单击“提交”后,我意识到发生了什么,但是进入了readonly模式,我无法删除!非常感谢!
readonly
这是因为1是int文字,因此<<将其应用于整数。结果强制转换为long,但那时为时已晚。
<<
如果您写1L << 32, 等等 ,那么一切都会好起来的。L用于表示long文字。
L