接线员!产生意想不到的结果

Mr *_*Que -2 c++

我对有关!!运算符的某些C ++代码有问题。它给了我意外的结果,我不明白为什么:

int x=-12; 
x=!!x; 
print("value=",x);
Run Code Online (Sandbox Code Playgroud)

此输出为1。但是我不知道怎么做。谁能解释这个模棱两可的结果?

Bat*_*eba 5

!!x分组为!(!x)

!x如果x非零,则为0;如果为零,则为1 x

将其应用于!结果相反。

因此,!!x可以将其视为设置x为1(如果不为零)和保持为0(如果为零)的一种方式。换句话说x = !!x与相同x = x ? 1 : 0