如何在Java中打印长原语
对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,没有溢出,为什
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
,都将溢出。