Java中的逻辑符号

Java中的逻辑符号,java,operators,bitwise-operators,notation,Java,Operators,Bitwise Operators,Notation,绝对基本的Java问题,我在Google上很难找到。以下是什么意思: (7 & 8) == 0? 这是否等同于写: 7 == 0 || 8 == 0? 我写了一个快速的主要测试,似乎是这样的。我只是想确保我没有遗漏任何东西。没有&为。如果在两个输入中都设置了相应的位,则设置一个位。因为在二进制中,7是111,8是1000,它们没有共同的位,所以结果是0 你所建议的东西实际上没有任何速记语法,一行也没有。有一些解决方法——测试集合或位集合中的成员身份,使用开关语句——但没有什么比7==

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

(7 & 8) == 0?
这是否等同于写:

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

没有<代码>&为。如果在两个输入中都设置了相应的位,则设置一个位。因为在二进制中,7是
111
,8是
1000
,它们没有共同的位,所以结果是
0


你所建议的东西实际上没有任何速记语法,一行也没有。有一些解决方法——测试
集合
位集合
中的成员身份,使用
开关
语句——但没有什么比
7==0 | 8==0
更有效、更简短的方法了。这是位比较,工作正常,因为与7和8进行比较,在其他情况下不能保证。如果整数中的两个位都匹配,则得到的结果将是“1”而不是“0”。

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

7
->
0111

8
->
1000

这显然会导致0


这在解释其他逐位运算符的同时,也很好地解释了您的确切示例。

&
是逐位和。给定两个输入位,以下按位和给出位输出:

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=aaaabbccc
//解压缩字段:
a=(n>>7)&0xF;
b=(n>>3)和0xF;
c=(n>>0)和0x7;
//打包字段:

如前所述,n=(a&是位比较,但也可以用作短路“and”。例如:

if((x == 3) &&  (y = 3/0)){
将一直抛出错误。但是

if((x == 3) & (y = 3/0)){
只有当x等于3时才会抛出错误。如果x不等于3,java不会费心计算其余的表达式,因为False&任何东西都是False

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