使用双逻辑非(!!)运算符困惑
这个问题在这里已经有了答案:
这不像双重否定那么简单。 例如,如果您有x == 5
,然后应用两个! 运算符( !!x
),它将变为1 - 因此,它用于标准化{0, 1}
范围内的布尔值。
请注意,您可以使用零作为布尔值false,布尔值使用非零值true,但您可能需要将结果标准化为0或1,那就是当!!
是有用的。
它与x != 0 ? 1 : 0
相同x != 0 ? 1 : 0
x != 0 ? 1 : 0
。
此外, 请注意,如果foo
不在{0, 1}
集合中{0, 1}
则不会发生这种情况 :
!!foo == foo
#include <iostream>
using namespace std;
int main()
{
int foo = 5;
if(foo == !!foo)
{
cout << "foo == !!foo" << endl;
}
else
{
cout << "foo != !!foo" << endl;
}
return 0;
}
打印foo != !!foo
。
它可以用作简写将foo
转换为布尔表达式。 出于某种原因,您可能想要将非布尔表达式专门变为true或false。
foo = !!foo
如果foo
非零, foo
变为1
,如果它已经是0
则将其保留为0
。
如果foo != 0
,那么!!foo == 1
。 这基本上是一个转换为布尔的技巧。