按位运算符java

use*_*761 2 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));
Run Code Online (Sandbox Code Playgroud)

输出是

CONST_1 & CONST_2: 1111110010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1111110011
~CONST_1 : 11111111111111111111110000001101
Run Code Online (Sandbox Code Playgroud)

在我看来这是错的,它应该是:

CONST_1 & CONST_2: 1010
CONST_1 ^ CONST_2: 1
CONST_1 | CONST_2: 1011
~CONST_1 : 101
Run Code Online (Sandbox Code Playgroud)

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

Mys*_*ial 8

改变这个:

final int CONST_1 = 1010;
final int CONST_2 = 1011;
Run Code Online (Sandbox Code Playgroud)

对此:

final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;
Run Code Online (Sandbox Code Playgroud)

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


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

final int CONST_1 = Integer.parseInt("1010",2);
final int CONST_2 = Integer.parseInt("1011",2);
Run Code Online (Sandbox Code Playgroud)