为什么!= 0工作但= = 1在使用按位&?时不起作用?

时间:2014-05-31 15:40:57

标签: java bit-manipulation

private void displayBinary() {
    int value = 123;
    for (int i = 128; i > 0; i = i / 2) {
        if ((value & i) != 0) System.out.print("1 ");
        else
            System.out.print("0 ");
    }
}

上述方法以二进制形式成功写出123,程序输出 0111101。 但是,如果我在if语句中将!= 0更改为== 1,则输出0000001.由于二进制只有0和1,为什么后者不起作用?

3 个答案:

答案 0 :(得分:1)

你没有使用base-2号码;您仍在使用基地10 int

从这里开始,迭代的所有数字(除了最后一个)都将失败if条件,因为它们不等于1.

答案 1 :(得分:0)

因为当你使用按位AND时,位(数字)的位置很重要。 1000在十进制或二进制中不等于1。

答案 2 :(得分:0)

(值& i)当它不是0时,将在1,2,4,8,16,32,64和128之间变化,具体取决于您正在测试的位。