按位运算111&011=9,怎么办?

Bitwise operation 111&011=9, how?

按位运算 111&011 在 java 中给出的输出为 9。 如何? 111&011 应该是 011,即 3.

您将数字指定为十进制和 八进制,而不是您假设的二进制。

           number  | decimal value | binary  
           --------- -----------------------
(decimal)  111     | 111           | 1101111 
(octal)    011     | 9             | 0001001     

所以:

   1101111
&     1001
   -------
   0001001

1001 = 2^3 + 1 = 9

检查它使用 Integer.toBinaryString

public static void main (String[] args) {
  System.out.println(
    Integer.toBinaryString(111));

  System.out.println(
    Integer.toBinaryString(011));

  System.out.println(111 & 011);
}

代码 ideone

补充 yaitloutou 的 :整数文字可以用 Java 中的不同基数表示:

  • 0,就是数字零(底数无所谓,但指定为十进制)
  • decimal:一个 non-zero 十进制数字最后跟十进制数字,例如20
  • 十六进制0x后跟一位或多位十六进制数字,例如0x14
  • 八进制0后跟一个或多个八进制数字,例如024
  • 二进制0b 后跟零和一,例如0b10100

下划线_可以用来分隔数字,它会被忽略,例如0b0001_0100

有关详细信息,请参阅 Java Language Specification 3.10.1