-1 的 AND 运算

Seo*_* OH 1 c++ boolean implicit-conversion type-promotion logical-and

在代码中实现逻辑运算时,发现一个现象,不应该在if语句中输入。原来这是AND (&&)-1和自然数的运算。

我不知道为什么在下面的相同代码中打印值 1。我直接运行1的补码和2的补码等计算,但没有得出1。

#include <iostream>

using namespace std;

int main()
{
    int a = 10;
    int b = -1;
    
    int c = a && b;
    
    printf("test = %d",c);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Bat*_*eba 6

该表达式a && b是一种bool类型,并且是trueor falsetrue当且仅当 ab非零时,false否则为。正如您的问题提到补码方案(请注意,从 C++20 开始, anint始终是 2 的补码),出于 的目的,-0 和 +0 都为零&&

当分配给inttype时c,该bool类型会隐式转换为 0 (if false) 或 1 (if true)。

(在 C 中,分析类似,只是a && b是一种int类型,因此不会发生隐式转换。)

  • @SeongtaekOH:除了有符号的负0。 (2认同)