为什么最后一个值错了?

时间:2016-11-02 11:04:07

标签: java binary bits

这是我的方法: 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解决了问题

1 个答案:

答案 0 :(得分:0)

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