按位运算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。
按位运算 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 的
0
,就是数字零(底数无所谓,但指定为十进制)- decimal:一个 non-zero 十进制数字最后跟十进制数字,例如
20
- 十六进制:
0x
后跟一位或多位十六进制数字,例如0x14
- 八进制:
0
后跟一个或多个八进制数字,例如024
- 二进制:
0b
后跟零和一,例如0b10100
下划线_
可以用来分隔数字,它会被忽略,例如0b0001_0100
有关详细信息,请参阅 Java Language Specification 3.10.1。