2011-12-11 201 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;