有符号数加法溢出

Java的基本数据类型都是有符号数,我们知道表示数据的字长是固定的,例如int的长度为32位(4byte),在进行加减乘除时,得到的结果可能需要超过32位字长才能精确表示,但是操作系统限制了数据类型的精度不是无限的,只能使用规定的字长,这就导致了结果会被截断,从而产生了溢出。
public class OverflowTest {

    public static void main(String[] args) {

        //正溢出
        Integer x = Integer.MAX_VALUE;
        Integer y = 1;
        System.out.println("x+y=" + (x+y));//x+y=-2147483648

        //负溢出
        Integer nx = Integer.MIN_VALUE;
        Integer ny = -1;
        Integer nz = nx + ny;
        System.out.println("x+y=" + nz); //x+y=2147483647
    }
}

你可能感兴趣的:(Java基础)