我在Google上很难找到的绝对基本的Java问题。以下是什么意思:
(7 & 8) == 0?
这相当于写作:
7 == 0 || 8 == 0?
我写了一个快速主要测试这个,似乎是这样的。我只是想确保我没有遗漏任何东西。
答案 0 :(得分:17)
不。 &
是bitwise and。如果在两个输入中都设置了相应的位,则置位。由于二进制,7为111
,8为1000
,因此它们没有共同位,因此结果为0
。
对于您建议的内容,实际上没有任何简写语法,而不是单行。有一些解决方法 - 测试Set
或BitSet
中的成员资格,使用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;什么都是假的。