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,按位与'时转换为04 & 0 等于 0,因此不会打印任何内容。

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

if (s & i == 0)

实际上等同于

if (s & (i == 0))

换句话说,您正在检查 i 是否为 0,然后 & 使用 s 计算结果(0 或 1)。你可能想要

if ((s & i) == 0)