我在尝试查找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.为什么在比较中引入了两个零?
我已经检查了其他问题的答案,但它们在我的情况下不起作用,或者与我要求的不完全相同。我相信一定有某种小事,但我无法找到。
提前致谢
答案 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
上面的答案已经指出了