如何在 Java 中打印长原语
How to print long primitive in Java
Java 相对较新,可能是一些愚蠢的问题。这是代码:
long a = 3232235521L;
long b = 192 * 16777216 + 168 * 65536 + 0 * 256 + 1;
System.out.println("a="+a);
System.out.println("b="+b);
输出:
a=3232235521
b=-1062731775
根据 Java 文档,long 2^63-1 的最大值是:9223372036854775807。所以对于 b,没有溢出,那么为什么 b 不是 3232235521?
您在数学运算中使用了整数基元,它仅在整数溢出后最后才进行转换。您可能想使用 192L * 16777216L + 168L * 65536L + 0L * 256L + 1L;
在代码的第 2 行中,所有操作数都是整数,这就是为什么运算结果也将是整数的原因。
由于结果 (3,232,235,521) 不适合整数(最大值为 2^31 - 1),这会导致 整数溢出 ,这就是为什么你得到否定的结果。
因此,您将需要使用 Long 文字来获得准确的结果。将第 2 行更改为以下代码。
long b = 192L * 16777216L + 168L * 65536L + 0L * 256L + 1L;
上面的代码应该会给你正确的输出。
您只是在赋值时将转换为 long - 直到那时一切都是整数,这就是为什么您在计算中途看到溢出的原因。
代码应该是:
long b = 192l * 16777216l + 168l * 65536l + 0l * 256l + 1l;
Java 相对较新,可能是一些愚蠢的问题。这是代码:
long a = 3232235521L;
long b = 192 * 16777216 + 168 * 65536 + 0 * 256 + 1;
System.out.println("a="+a);
System.out.println("b="+b);
输出:
a=3232235521
b=-1062731775
根据 Java 文档,long 2^63-1 的最大值是:9223372036854775807。所以对于 b,没有溢出,那么为什么 b 不是 3232235521?
您在数学运算中使用了整数基元,它仅在整数溢出后最后才进行转换。您可能想使用 192L * 16777216L + 168L * 65536L + 0L * 256L + 1L;
在代码的第 2 行中,所有操作数都是整数,这就是为什么运算结果也将是整数的原因。
由于结果 (3,232,235,521) 不适合整数(最大值为 2^31 - 1),这会导致 整数溢出 ,这就是为什么你得到否定的结果。
因此,您将需要使用 Long 文字来获得准确的结果。将第 2 行更改为以下代码。
long b = 192L * 16777216L + 168L * 65536L + 0L * 256L + 1L;
上面的代码应该会给你正确的输出。
您只是在赋值时将转换为 long - 直到那时一切都是整数,这就是为什么您在计算中途看到溢出的原因。
代码应该是:
long b = 192l * 16777216l + 168l * 65536l + 0l * 256l + 1l;