为什么最后一个值是错误的?

Why is the last value wrong?

这是我的方法: Fl_IN = 1114599018 和 k = 0

public void int FL(int FL_IN, int k) {
    int d0, d1;
    d0 = FL_IN >> 16;
    d1 = FL_IN & 0xffff;
    if (k % 2 == 0) {
        d1 = d1 ^ (d0 & EK[k / 2]);
        d0 = d0 ^ (d1 | EK[(k / 2 + 6) % 8 + 8]);
    } else {
        d1 = d1 ^ (d0 & EK[((k - 1) / 2 + 2) % 8 + 8]);
        d0 = d0 ^ (d1 | EK[((k - 1) / 2 + 4) % 8]);
    }
    System.out.println(Integer.toBinaryString(d0));
    System.out.println(Integer.toBinaryString(d1));
    System.out.println(Integer.toBinaryString(d0 << 16));
    System.out.println(Integer.toBinaryString((d0 << 16) | d1));
    System.out.println((d0 << 16) | d1);
}

这是输出:

1110110010101000
10111001000110
11101100101010000000000000000000
11101100101010000010111001000110
-324522426

不明白为什么说11101100101010000010111001000110 = -324522426应该是3970444870

编辑:使用 long 而不是 int 解决了问题

整数范围从 -2,147,483,648 and a maximum value of 2,147,483,647 此值超出范围 3,970,444,870。