位运算符java

位运算符java,java,bit-manipulation,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.ou

我的代码是

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
请解释我为什么会有这样的结果。谢谢

改变这一点:

final int CONST_1 = 1010;
final int CONST_2 = 1011;
为此:

final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;
不要忘记,默认情况下,文本是十进制的。你显然希望它们是二进制的


二进制文本需要Java1.7。因此,如果不可用,您可以使用以下方法:

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

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


整数1010是二进制的1111110010,因此结果是正确的。

CONST_1
是十进制的
1010
CONST_1
的二进制值为
1111110010
。类似地,
CONST_2
1111110011


现在这个结果更有意义了吗?

您的数字不是二进制的。它们是用十进制写的。您需要在0b之前加上前缀,告诉Java7这个int是二进制的。如果您不使用Java 7,则没有二进制文字语法,因此您可以使用Integer.parseInt(“1010”,2)作为解决方法或使用十六进制文字表示法:

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.");
}

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

现在,在Java中,整数和浮点文本默认为十进制。因此,您在上面键入的值
1010
将是十进制的
1010
。也就是说,一千零十。如果您希望它们是二进制的(问题很清楚),那么有很多可能性

  • 使用等效的十进制值
您可以使用要表示的二进制值的十进制等效值。这里,例如,二进制
1010
的十进制等价物是
10
,二进制
1011
的十进制等价物是
11

final int CONST_1 = 10;
final int CONST_2 = 11;
  • 使用包装类解析方法
每个包装器类都有一个解析方法,该方法也将数字系统的基作为参数。所以

final int CONST_1 = Integer.parseInt("1010", 2);
final int CONST_2 = Integer.parseInt("1011", 2);
  • 如果您使用的是Java7,请使用二进制文本
旧版本的Java不支持二进制文本。Java7引入了二进制文本。看


初始化常量时使用的值是十进制的,而不是二进制的!我无法将其更改为final int CONST_1=0b1010;它说二进制文本只能与源代码级别1.7或更高版本一起使用。请看这个问题:()
0b
前缀需要Java7。
final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;