[英]Bitwise Operators 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
請解釋我為什么會有這樣的結果。 謝謝!
改變這個:
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);
CONST_1
是十進制的1010
。 CONST_1
的二進制值為1111110010
。 類似地, CONST_2
是1111110011
。
結果現在更有意義嗎?
我想你知道字面意思是什么意思。 如果沒有,請參閱: 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引入了二進制文字。 查看功能 。
final int CONST_1 = 0b1010;
final int CONST_2 = 0b1011;
不要將僅由0和1組成的整數與整數的二進制表示混淆...
整數1010是二進制的1111110010,因此結果是正確的。
你的號碼不是二進制的。 它們以十進制編寫。 你想在前面加一個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.");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.