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

时间:2016-05-17 09:43:24

标签: java bit-manipulation byte bit

我在尝试查找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.为什么在比较中引入了两个零?

我已经检查了其他问题的答案,但它们在我的情况下不起作用,或者与我要求的不完全相同。我相信一定有某种小事,但我无法找到。

提前致谢

2 个答案:

答案 0 :(得分:3)

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

如果您希望数字为二进制,请使用前导" 0b"标记它:

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

答案 1 :(得分:1)

您可以直接对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

上面的答案已经指出了