Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中打印长原语_Java_Overflow_Long Integer - Fatal编程技术网

如何在Java中打印长原语

如何在Java中打印长原语,java,overflow,long-integer,Java,Overflow,Long Integer,对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,没有溢出,为什

对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行中,所有操作数都是整数,这就是为什么操作的结果也是整数

由于结果(3232235521)不适合整数(最大值为2^31-1),因此会导致整数溢出,这就是为什么会得到负结果

因此,您需要使用长文字来获得准确的结果。将第2行更改为以下代码

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

上面的代码应该会给出正确的输出。

在赋值过程中,您只是在进行到long的转换,直到这一点为止,所有内容都是整数,这就是为什么您在计算过程中看到溢出的原因

代码应为:


长b=192l*16777216l+168l*65536l+0l*256l+1l

long的最大值为2^63-1则y不适合??因为表达式的右侧只有整数,所以各个操作的结果将设置为整数。无论哪个结果不适合
int
,都将溢出。