按位运算符java

时间:2011-12-11 14:45:07

标签: java bit-manipulation

我的代码是

final int CONST_1 = 1010;
final int CONST_2 = 1011;

System.out.println("CONST_1 & CONST_2: " + Integer.toBinaryString(CONST_1 & CONST_2));
System.out.println("CONST_1 ^ CONST_2: " + Integer.toBinaryString(CONST_1 ^ CONST_2));
System.out.println("CONST_1 | CONST_2: " + Integer.toBinaryString(CONST_1 | CONST_2));
System.out.println("~CONST_1 : " + Integer.toBinaryString(~CONST_1));

输出

CONST_1 & CONST_2: 1111110010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1111110011
~CONST_1 : 11111111111111111111110000001101

在我看来这是错误的应该是:

CONST_1 & CONST_2: 1010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1011
~CONST_1 : 101

请解释我为什么会有这样的结果。谢谢!

5 个答案:

答案 0 :(得分:8)

改变这个:

final int CONST_1 = 1010;
final int CONST_2 = 1011;

到此:

final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;

不要忘记默认情况下文字是十进制的。你显然希望它们是二进制的。


二进制文字需要Java 1.7。所以,如果没有,你可以这样做:

final int CONST_1 = Integer.parseInt("1010",2);
final int CONST_2 = Integer.parseInt("1011",2);

答案 1 :(得分:1)

CONST_1的小数为1010CONST_1的二进制值为1111110010。同样,CONST_21111110011

结果现在更有意义吗?

答案 2 :(得分:1)

我想你知道字面意思是什么意思。如果没有,请参阅:Java LiteralsLiteral

现在,在Java中,Integer和Floating-Point文字默认为十进制。因此,您在上面输入的值1010将为十进制1010。即。,一千零一个。如果你想要它们是二进制的(问题很清楚),有很多可能性。

  • 使用等效的十进制值。

您可以使用要表示的二进制值的十进制等值。例如,二进制1010的十进制等值为10,二进制1011的十进制等值为11

final int CONST_1 = 10;
final int CONST_2 = 11;
  • 使用包装器类解析方法

每个包装器类都有一个parse方法,它以数字系统的基础作为参数。所以

final int CONST_1 = Integer.parseInt("1010", 2);
final int CONST_2 = Integer.parseInt("1011", 2);
  • 如果您使用的是Java 7,请使用二进制文字

旧版Java中不支持二进制文字。 Java 7引入了二进制文字。请参阅features

final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;

答案 3 :(得分:0)

不要将仅由0和1组成的整数与整数的二进制表示混淆...

整数1010是二进制的1111110010,所以结果是正确的。

答案 4 :(得分:0)

您的号码不是二进制的。它们以十进制编写。你想在前面加一个0b告诉Java 7这个int是二进制的。如果您没有使用Java 7,则没有二进制文字语法,因此您可以将此Integer.parseInt(“1010”,2)用作解决方法或使用HEX文字表示法:

final int CONST_1_BINARY = 0b1010;
final int CONST_1_DECIMAL = 1010;

if( CONST_1_BINARY == CONST_1_DECIMAL ) {
   System.out.println("They are the same!");
} else {
   System.out.println("They are NOT the same.");
}