如何在java中打印长基元

pexxcrt2  于 2021-07-03  发布在  Java
关注(0)|答案(3)|浏览(385)

这个问题在这里已经有答案了

java中的乘法运算产生负值(4个答案)
四年前关门了。
对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?

yyyllmsg

yyyllmsg1#

在代码的第2行中,所有操作数都是整数,这就是为什么操作的结果也是整数。
由于结果(3232235521)不适合整数(最大值为2^31-1),因此会导致整数溢出,这就是为什么会得到负结果。
因此,您需要使用长文本来获得准确的结果。将第2行改为下面的代码。

long b = 192L * 16777216L + 168L * 65536L + 0L * 256L + 1L;

上面的代码应该为您提供正确的输出。

hjzp0vay

hjzp0vay2#

您在数学过程中使用整数原语,它只在整数溢出之后的最后转换。您可能需要使用192l16777216l+168l65536l+0l*256l+1l;

qncylg1j

qncylg1j3#

你只需要在赋值中转换为long,直到那一点,所有的东西都是整数,这就是为什么你在计算过程中看到溢出。
代码应为: long b = 192l * 16777216l + 168l * 65536l + 0l * 256l + 1l;

相关问题