if(!(s& i))和if(s& i == 0)之间的区别是什么?

时间:2017-02-01 02:10:11

标签: c++ c bitwise-operators

例如

int main(){
    int s = 4, i = 3;
    if(s & i == 0)   cout << (s & i) << endl;
    if(!(s & i))    cout << (s & i) << endl;
    return 0;
}

仅输出一个零。 为什么不打印或打印两个零?

3 个答案:

答案 0 :(得分:7)

==的优先级高于&。所以

if (s & i == 0)

实际上相当于

if (s & (i == 0))

换句话说,您正在检查i0,然后&结果(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,在按位和按下时会转换为04 & 0等于0,因此不会打印任何内容。