这个按位操作会发生什么?

时间:2015-07-15 12:52:26

标签: java bit-manipulation

考虑以下两个位序列

xxxx x100 0000 0000

xxxx x000 0000 0000

为什么((int) sequenceOfBits >> 10) & 0x1;没有意识到差异?

1 个答案:

答案 0 :(得分:1)

您没有显示任何代码,所以我希望您不会这样做

public static void main(String[] args) throws Exception {
    byte sequenceOfBits = (byte)1000000000L;
    System.out.println(((int)sequenceOfBits >> 10) & 1);
}

这将产生0

的结果

字节序列10000000000等于十进制值1024.所以你真的应该有:

public static void main(String[] args) throws Exception {
    int sequenceOfBits = 1024;
    System.out.println((sequenceOfBits >> 10) & 1);
}

不要将代码中的数字混淆为二进制,即使它们只是0和1的

public static void main(String[] args) throws Exception {
    System.out.println(Long.toBinaryString(10000000000L));
    System.out.println(Integer.toBinaryString((byte)10000000000L & 0xFF));
    System.out.println(Integer.toBinaryString(1024));
}

输出:

1001010100000010111110010000000000
0
10000000000