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