Java中逻辑的表示法

时间:2012-02-08 23:11:30

标签: java operators bitwise-operators notation

我在Google上很难找到的绝对基本的Java问题。以下是什么意思:

(7 & 8) == 0?

这相当于写作:

7 == 0 || 8 == 0?

我写了一个快速主要测试这个,似乎是这样的。我只是想确保我没有遗漏任何东西。

5 个答案:

答案 0 :(得分:17)

不。 &bitwise and。如果在两个输入中都设置了相应的位,则置位。由于二进制,7为111,8为1000,因此它们没有共同位,因此结果为0

对于您建议的内容,实际上没有任何简写语法,而不是单行。有一些解决方法 - 测试SetBitSet中的成员资格,使用switch语句 - 但没有任何一项既有效又简短7 == 0 || 8 == 0

答案 1 :(得分:10)

&是按位AND。给定两位输入,以下按位AND给出位输出:

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

在这种情况下,

7 in binary is 00000111
8 in binary is 00001000
               --------
               00000000, which is 0 in decimal.

假设您有26而不是8。

 7 in binary is 00000111
26 in binary is 00011010
                --------
                00000010, which is 2 in decimal.

按位运算用于提取和操作打包到数字中的字段。

例如,假设您有一个3个字段打包成一个数字,两个4位(0..15),一个和3位(0..7)。

// n = aaaabbbbccc

// Unpack the fields:
a = (n >> 7) & 0xF;
b = (n >> 3) & 0xF;
c = (n >> 0) & 0x7;

// Pack the fields:
n = (a << 7)
  | (b << 3)
  | (c << 0);

答案 2 :(得分:4)

&是一个按位运算符。这意味着您正在对表示8和7的位进行AND运算:

7 - &gt; 0111

8 - &gt; 1000

这显然会导致0。

这个wikipedia article解释了你的确切示例以及解释其他逐位运算符。

答案 3 :(得分:3)

这是比较比较,工作正常,因为你正在与7和8比较,不保证与其他情况。如果整数中的两个位匹配,则会得到结果为&#39; 1&#39;不是&#39; 0&#39;。

答案 4 :(得分:3)

&安培;如上所述,它有点比较,但也可以作为短路“和”。例如:

if((x == 3) &&  (y = 3/0)){

会一直抛出错误。然而,

if((x == 3) & (y = 3/0)){
如果x等于3,

只会抛出一个错误。如果x不等于3,java将不会考虑其余的表达式,因为False&amp;什么都是假的。