考虑以下两个位序列
xxxx x100 0000 0000
xxxx x000 0000 0000
为什么((int) sequenceOfBits >> 10) & 0x1;
没有意识到差异?
答案 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