面试题
i+1<i的数( )
A.存在 B.不存在 C.不确定
分析:
- 算术运算符的优先级高于比较运算符,因此问题是讨论是否存在i+1的数小于i
- 实际上这个题讨论的是数据溢出的问题
/** * @author 雷雨 * @date 2020/9/9 11:11 */
public class DataFlow {
/** * 数据溢出问题 * 当数据为最大范围时,再加就变成负数,因此存在i+1<i * @param args */
public static void main(String[] args) {
int i = Integer.MAX_VALUE;
if (i+1<i){
System.out.println("存在");
}
}
}
解答:
为什么会存在i+1小于i?
在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE即-2147483648。
对整形最大值加1,2147483648(越界了),那么此时值为多少呢?结果是-2147483648,即是Integer.MIN_VALUE。类似的,对Integer.MIN_VALUE取反或者取绝对值呢?仍为Integer.MIN_VALUE,因为值为-2147483648,绝对值2147483648超过Integer.MAX_VALUE 2147483647。
我们尝试将MAX_VALUE+1的值直接输出,看看是否是最小值,Integer.MIN_VALUE
发现的确发生了数据溢出,并且在超过数据范围时,数据的值并非像运算符之前那样增加的,而反而变小了!具体的原因和反码,补码有关系.这就是数据溢出.
同理,也就存在了i-1>i
最近都会整理一些经典和易错的java面试题,有什么问题我们也可以一起交流,私信会及时回复