大家好,今天小编关注到一个比较有意思的话题,关于java语言基本常量的问题,于是小编就整理了1个相关介绍Java语言基本常量的解答,让我们一起看看吧。
请教java小问题?
首先需要知道 :
在JDK中,整形类型是有范围的,最大值为integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE -2147483648。
因此 i=Integer.MIN_VALUE 即 i = -2147483648;
i-1L 这里的结果应该为long长整型,因此 i-1L 的结果为 -2147483649;
最后 21474837 与 -2147483649的和为-2。
因此结果为-2。
答案是-2。为什么这样呢,因为i取Integer的最小值是个常数,也就是int的最小值-2147483648,减1,发生溢出,变为21474837。这应该很好理解,但减去1l呢,这里会用long类型接收结果,不发生溢出就是-2147483649和为-2。建议题主遇到这样的问题自己动动手,把每一步结果输出一下记忆更深刻
这个问题看似简单,但如果不实际测试可能还真会搞错,最好的办法是写个Demo将各个值输出,就能揣摩出其中的意思,咱们结合程序及输出来分析下:
在Java中整形是有数据范围的,其中最小值:Integer.MIN_VALUE是-2147483648。如果在此基础上再减1,就会出现溢出现象,从输出结果看已经变成:2147483647。而(i-1L)返回是long长整形,再减去1,不会发生溢出正常计算,结果是:-2147483649。
(i-1):2147483647
(i-1L):-2147483649
所以,(i-1) + (i-1L)结果就是:-2。
首先要了解,所有的有符号的运算(正负)都是使用二进制补码进行加减运算的,先运算i-1,因为i是int得最小值,转换为二进制,二进制所有位是1000000000......再转换成补码1111111...,再给补码-1,然后再转换成源码,然后就会数值溢出成了1011111....33位.那然后计算机对数据进行截取,int得长度为32位,就会从0截取。这样就成了int得最大值。
而最小值-1L,在编译时候,编译器会对最小值向上自动转换,转成long型,此时就成了int最小值变成long后+1,
这样2个数据想加就成了-2
值为-2
1. int 的取值区间:
最大值为 2147483647,最小值为 -2147483648。
2. int 溢出特性:
正数过大溢出为负数,负数过小溢出为正数,
即,最大值 2147483647 再增 1 得到 -2147483648,
同理,最小值 -2147483648 再减 1 得到 2147483647
3. 整数直接量默认为 int 型:
如:1、2、99、56 ... ,整数直接量默认都是 int 类型
到此,以上就是小编对于java语言基本常量的问题就介绍到这了,希望介绍关于java语言基本常量的1点解答对大家有用。