简单Java整数和长算术
简单的代码没问题简单Java整数和长算术,java,int,long-integer,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 为什么元素是
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
-谢谢将变量从整数提升为长整数
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);
是的,但只有在算术之后。所以你得到了int*int+int,这是一个int,然后它将把它转换成一个long。然而,在这一点上,你有一个整数溢出,也就是说,它超出了整数的界限
您需要将右侧的数字转换为长首
long elements = 2L * Integer.MAX_VALUE + 150000;
或
B
及
但在Java中,int可以表示最大32位。我还没有足够的rep来评论: Oracle Java教程确认它将数据转换为原语类型long。由于要添加int和long,编译器将在将数据转换为long之前添加数据。如果你真的想让它一直持续很长时间,你就必须输入cast 前
类型是通过在当前数据类型前面添加所需的基元类型而进行的转换。它知道在哪里转换?在第三个表达式中,你根本不用long…在第二个表达式中,你不用long,直到为时已晚。你认为这是为什么?为什么它不应该这样做呢?它也烧焦了,所以是负值
long elements = 2L * Integer.MAX_VALUE + 150000;
long elements = 2 * (long)Integer.MAX_VALUE + 150000;
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
// (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);