2011-12-11 215 views
2

我的代码是位运算符的Java

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 

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

+3

您初始化常量的值是DECIMAL,而不是二进制! – ghik

回答

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); 
+0

我无法将其更改为final int CONST_1 = 0b1010; – user1057761

+0

它说二进制文字只能使用源级别1.7或更高 – user1057761

+0

看到这个问题:(http://stackoverflow.com/questions/867365/in-java-can-i-define-an-integer-constant-in二进制格式)前缀'0b'需要Java 7。 – Mysticial

0

不要混淆整数的二进制表示的只有0和1组成的整数...

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

1

CONST_1是十进制的1010CONST_1的二进制值是1111110010。类似地,CONST_21111110011

现在的结果更有意义吗?

0

你的号码不是二进制的。它们用十进制表示。你想预先设定一个0b来告诉Java 7这个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."); 
} 
1

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

现在,整数和浮点文字在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); 
  • 如果您使用的是Java 7,使用二进制文字

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

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