使用双逻辑非(!!)运算符困惑

这个问题在这里已经有了答案:

  • C ++代码中的双重否定14个答案
  • 什么是C中的“!!”? [复制] 7个答案

  • 这不像双重否定那么简单。 例如,如果您有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 。 这基本上是一个转换为布尔的技巧。

    链接地址: http://www.djcxy.com/p/73551.html

    上一篇: Confused by use of double logical not (!!) operator

    下一篇: When should I really use noexcept?