例如
int main(){
int s = 4, i = 3;
if(s & i == 0) cout << (s & i) << endl;
if(!(s & i)) cout << (s & i) << endl;
return 0;
}
仅输出一个零。 为什么不打印或打印两个零?
答案 0 :(得分:7)
==
的优先级高于&
。所以
if (s & i == 0)
实际上相当于
if (s & (i == 0))
换句话说,您正在检查i
是0
,然后&
结果(0或1)s
。你可能想要
if ((s & i) == 0)
答案 1 :(得分:4)
第一个条件
if(s & i == 0) cout << (s & i) << endl;
相当于这个条件
if(s & ( i == 0 ) ) cout << (s & i) << endl;
与这种情况没什么共同之处
if(!(s & i)) cout << (s & i) << endl;
我认为你的意思是
if( ( s & i ) == 0) cout << (s & i) << endl;
在这种情况下,两个条件都是等效的。
答案 2 :(得分:4)
等式比较运算符(==
)的优先级高于按位和运算符(&
),因此第一个表达式等效于:
if(s & (i == 0)) cout << (s & i) << endl;
由于i
设置为3
,(i == 0)
为false
,在按位和按下时会转换为0
。 4 & 0
等于0
,因此不会打印任何内容。