我有这个代码,它的结果是'2'。我用谷歌搜索和搜索书籍,但没有找到对我有帮助的好答案。
int i = 2;
int j = 3;
int x = i & j;
System.out.println (x);
谁能解释一下。
在这里,'&' 是按位和运算符。只有在两个操作数中都设置了位时,才会在结果中设置位:
这是操作:
2: 00000010
& 3: 00000011
-----------
2: 00000010
当然,这里的整数是 32 位的,我只显示了最后 8 位,但无论如何,前 24 位对于这些数字都是零。
它是一个位运算符。
二进制中的 2 是“10”。二进制中的 3 是“11”。按位 & 运算符比较它们,如下所示:
10
&11
--
10
对于两个数字都为 1 的每一列,它将返回 1。在这种情况下,结果为 '10',作为 int 等于 2。
& 是按位与
&& 是逻辑与。
2 & 3 正确交付 2。
以二进制表示:
10
11
--
10
&
是一个按位运算符,其工作方式如下:
0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1
因此2 & 3 = 2
:
2 ==> 00000000000000000000000000000010
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3 ==> 00000000000000000000000000000011
---------
2 ==> 00000000000000000000000000000010
举这些例子:
System.out.println(2 & 3);
System.out.println(3 & 4);
System.out.println(8 & 4);
System.out.println(9 & 5);
System.out.println(11 & 7);
// binary representation of above operations
System.out.println(0b10 & 0b11);
System.out.println(0b11 & 0b100);
System.out.println(0b1000 & 0b100);
System.out.println(0b1001 & 0b101);
System.out.println(0b1011 & 0b111);
它们导致输出:
2
0
0
1
3
2
0
0
1
3
然后返回并查看二进制表示并注意结果答案如何是数字的按位与(而不是逻辑与 &&)