从 Java 中的字节中找出位值的问题

Issue finding out bits values from byte in Java

我在尝试查找 Java 字节类型的按位值时遇到问题。当我尝试使用按位运算符获取一定数量的位的值时,这个值不是我预见的方式。 (很简单的)代码如下:

public class Demo 
{
    public static void main(String[]arg)
    {
        byte demo = 127;
        System.out.println("demo is: "+(demo & 00000011));
    }
}

在这种情况下,我期望获得 3(因为我期望的是 01111111 AND 00000011 = 00000011),但我获得了 9 (00001001)。如果我用 00000111 做,那么结果是 73 (01001001) 而不是 7。为什么在比较中引入了两个零?

我已经检查了其他问题的答案,但它们不适用于我的情况,或者与我要求的不完全相同。我敢肯定一定有某种小事,但我无法找到如何。

提前致谢

正如 Patricia 已经指出的那样:Java 将以前导零开头的数字解释为八进制值。

如果您希望数字是二进制的,请用前导“0b”标记它:

System.out.println("demo is: "+(demo & 0b00000011));

您可以直接对 int 值进行按位运算(Java 将进行二进制转换)

public static void main(String[] args) throws ParseException {
        int demo = 127;
        System.out.println(demo);
        System.out.println("demo is: " + (demo & 3));
    }

参考:http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm https://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

或者您可以将八进制值转换为二进制表示形式:

00000011
to 
0b00000011

上面的回答已经指出了