简单的Java整数和长算术

时间:2014-02-10 12:06:20

标签: java int long-integer

简单代码没问题

long x =  Integer.MAX_VALUE;
System.out.println(x * 2 + "...." + Long.MAX_VALUE);

= 4294967294....9223372036854775807

但是这里发生了什么?为什么-2

System.out.println(2 * Integer.MAX_VALUE + "...." + Long.MAX_VALUE);
=   -2....9223372036854775807

以及为什么元素是149998,编译器是否将这些转换为long?

    long elements = 2 * Integer.MAX_VALUE + 150000;
System.out.println(elements + "...." + Long.MAX_VALUE);
149998....9223372036854775807

-Thanks

4 个答案:

答案 0 :(得分:6)

将变量从整数提升为长整数。

long elements = 2 * Integer.MAX_VALUE + 150000; 

应该是

long elements = 2L * Integer.MAX_VALUE + 150000;

对原始陈述的评价,

long elements = 2 * Integer.MAX_VALUE + 150000; 

相当于

long elements = (long)(2 * Integer.MAX_VALUE + 150000); 

答案 1 :(得分:3)

and why elements is 149998, doesn't the compiler converts these to long?

确实如此,但只有算术之后。所以你有int * int + int,这是一个int。然后它将把它投入很长时间。但是,此时你有一个整数溢出(即它超出了整数的范围)

你需要将右边的数字转换为长的第一个

long elements = 2L * Integer.MAX_VALUE + 150000;

long elements = 2 * (long)Integer.MAX_VALUE + 150000;

答案 2 :(得分:1)

Integer.MAX_VALUE =2147483647=01111111 11111111 11111111 11111111 

并且

2*Integer.MAX_VALUE=4294967294=2*(01111111 11111111 11111111 11111111)  
                              =this will result a 33-bit value

但在Java int中最多可以代表32位。

答案 3 :(得分:0)

我还没有足够的回复评论:(。

Oracle Java教程确认它会将数据转换为基本类型。由于您要添加int和long,因此编译器会在将数据转换为long之前添加数据。如果你真的希望它在整个时间内都很长,你必须输入强制转换。

EX;

 // (long) is typcasted
long elements = 2 * (long) Integer.MAX_VALUE + 150000;

//prints elements as a long t + "" + max value
System.out.println(elements + "...." + Long.MAX_VALUE); 

通过在当前数据类型前面添加所需的基元类型来预先输入类型。