在 Java 中位移位时溢出



我的情况我不会忘记。当我这样做时

 System.out.println(1<<30);

我得到了非常大的正数1073741824。但是当我这样做时

 System.out.println(1<<31);

我得到了非常低的数字-2147483648。当我读到长类型是有符号的 64 位长。最大数量为 2^63 -1。所以在这里我不明白为什么我的班次是负的((((行为

System.out.println((long)(1<<31));

也给出了相同的结果(((<</p>

div class="one_answers">

1 << 31是一个整数,而不是一个长整型。你所拥有的并不是真正的溢出,而是Integer.MIN_VALUE(符号位设置,其余所有零)。

除非适当地为它们添加后缀,否则默认情况下,Java 中的任何数字常量都是int。如果你想要一个长,你必须告诉编译器你想要一个长:1L << 31注意L)。

请注意,即使(long) (1 << 31)也不起作用;即使在这种情况下,1 << 31仍然是一个整数。 "事后"投射无济于事;)

当我们向

左移动 1 31 时,我们得到0x80000000,这是 Integer.MIN_VALUE = -2147483648。请参阅整数类。

相关内容

  • 没有找到相关文章

最新更新