我的代码是
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
请解释我为什么会有这样的结果。谢谢!
答案 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
的小数为1010
。 CONST_1
的二进制值为1111110010
。同样,CONST_2
为1111110011
。
结果现在更有意义吗?
答案 2 :(得分:1)
我想你知道字面意思是什么意思。如果没有,请参阅:Java Literals和Literal。
现在,在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中不支持二进制文字。 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.");
}