簡體   English   中英

按位運算符java

[英]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_21111110011

結果現在更有意義嗎?

我想你知道字面意思是什么意思。 如果沒有,請參閱: Java LiteralsLiteral

現在,在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 7,請使用二進制文字

舊版本的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM