if( !(s & i) ) 和 if( s&i == 0 ) 有什么区别?
What's the difference between if( !(s & i) ) and if( s&i == 0 )?
例如
int main(){
int s = 4, i = 3;
if(s & i == 0) cout << (s & i) << endl;
if(!(s & i)) cout << (s & i) << endl;
return 0;
}
只输出一个零。
为什么不打印或打印两个零?
第一个条件
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;
在这种情况下,两个条件是等价的。
相等比较运算符(==
)的优先级高于按位与运算符(&
),所以第一个表达式等价于:
if(s & (i == 0)) cout << (s & i) << endl;
由于i
设置为3
,(i == 0)
是false
,按位与'时转换为0
。 4 & 0
等于 0
,因此不会打印任何内容。
==
的优先级高于 &
。所以
if (s & i == 0)
实际上等同于
if (s & (i == 0))
换句话说,您正在检查 i
是否为 0
,然后 &
使用 s
计算结果(0 或 1)。你可能想要
if ((s & i) == 0)
例如
int main(){
int s = 4, i = 3;
if(s & i == 0) cout << (s & i) << endl;
if(!(s & i)) cout << (s & i) << endl;
return 0;
}
只输出一个零。 为什么不打印或打印两个零?
第一个条件
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;
在这种情况下,两个条件是等价的。
相等比较运算符(==
)的优先级高于按位与运算符(&
),所以第一个表达式等价于:
if(s & (i == 0)) cout << (s & i) << endl;
由于i
设置为3
,(i == 0)
是false
,按位与'时转换为0
。 4 & 0
等于 0
,因此不会打印任何内容。
==
的优先级高于 &
。所以
if (s & i == 0)
实际上等同于
if (s & (i == 0))
换句话说,您正在检查 i
是否为 0
,然后 &
使用 s
计算结果(0 或 1)。你可能想要
if ((s & i) == 0)