inq*_*uam 31 c++ bitwise-operators logical-operators
我有一些广泛使用的C++代码!!.我有点困惑,因为据我所知,!!它不是一个独立的运营商,而是两个!接一个的运营商.所以那就意味着!!foo和刚刚一样foo.
!!实际上是否有任何地方和/或理由?我在考虑它是否可能有一些明智的含义?那么你首先执行一些有点操作foo,然后!对结果执行?但我似乎不记得!被用作一个有点明智的操作员,似乎没有找到任何参考告诉我它也是.据我所知!,仅用作逻辑运算符,在这种情况下
!!foo == foo
Nem*_*ric 49
它不像双重否定那么简单.例如,如果你有x == 5,然后申请两个!运算符(!!x),它将变为1 - 因此,它用于规范化{0, 1}范围内的布尔值.
请注意,您可以将零用作布尔值false,并将非零用于布尔值true,但您可能需要将结果标准化为0或1,这!!就是有用的时间.
它是一样的x != 0 ? 1 : 0.
另请注意,如果foo未{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;
}
Run Code Online (Sandbox Code Playgroud)
打印foo != !!foo.
它可以用作速记foo转换为布尔表达式.您可能希望仅出于某种原因将非布尔表达式转换为true或false.
foo = !!foo要拐弯foo进入1,如果是非零,并使其保持在0如果它已经是了.