0

我有这个代码,它的结果是'2'。我用谷歌搜索和搜索书籍,但没有找到对我有帮助的好答案。

int i = 2;
int j = 3;
int x = i & j;
System.out.println (x);

谁能解释一下。

4

5 回答 5

4

在这里,'&' 是按位和运算符。只有在两个操作数中都设置了位时,才会在结果中设置位:

这是操作:

  2: 00000010
& 3: 00000011
-----------
  2: 00000010

当然,这里的整数是 32 位的,我只显示了最后 8 位,但无论如何,前 24 位对于这些数字都是零。

于 2013-02-28T20:04:06.817 回答
3

它是一个位运算符。

二进制中的 2 是“10”。二进制中的 3 是“11”。按位 & 运算符比较它们,如下所示:

 10
&11
 --
 10

对于两个数字都为 1 的每一列,它将返回 1。在这种情况下,结果为 '10',作为 int 等于 2。

于 2013-02-28T20:05:29.987 回答
1

& 是按位与
&& 是逻辑与。

2 & 3 正确交付 2。

以二进制表示:

10
 11
 --
 10
于 2013-02-28T20:04:05.957 回答
1

&是一个按位运算符,其工作方式如下:

0 & 0 = 0
1 & 0 = 0
0 & 1 = 0
1 & 1 = 1

因此2 & 3 = 2

2 ==> 00000000000000000000000000000010
      &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
3 ==> 00000000000000000000000000000011
---------
2 ==> 00000000000000000000000000000010
于 2013-02-28T20:04:11.613 回答
1

举这些例子:

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

然后返回并查看二进制表示并注意结果答案如何是数字的按位与(而不是逻辑与 &&)

于 2013-02-28T20:07:27.990 回答