它可以简单地完成:
return Math.min(Math.max((long) n1 + n2, Integer.MIN_VALUE), Integer.MAX_VALUE);
该操作(long) n1 + n2
确保结果是 a long
,因此n1 + n2
既不会上溢也不会下溢。
Math.max((long) n1 + n2, Integer.MIN_VALUE)
确保在这种情况下会n1 + n2
出现下溢,我们得到 value Integer.MIN_VALUE
。否则,我们得到 的结果n1 + n2
。
最后,Math.min(.., Integer.MAX_VALUE)
确保 ifn1 + n2
会溢出方法返回Integer.MAX_VALUE
。否则,n1 + n2
将返回操作。
运行示例:
public class UnderOver {
public static long add(int n1, int n2){
return Math.min(Math.max((long) n1 + n2, Integer.MIN_VALUE), Integer.MAX_VALUE);
}
public static void main(String[] args) {
System.out.println(add(Integer.MAX_VALUE, 10));
System.out.println(add(Integer.MIN_VALUE, -10));
System.out.println(add(-10, -10));
System.out.println(add(10, 10));
System.out.println(add(10, 0));
System.out.println(add(-20, 10));
}
}
输出:
2147483647
-2147483648
-20
20
10
-10