从 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
上面的回答已经指出了
我在尝试查找 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
上面的回答已经指出了