c++ - 因使用双重逻辑非 (!!) 运算符而感到困惑

标签 c++ bitwise-operators logical-operators

我有一些广泛使用 !! 的 C++ 代码。我有点困惑,因为据我所知 !! 不是一个独立的运算符,而是两个 ! 一个接一个。所以这意味着 !!foofoo 相同。

!! 真的有意义吗?我在想它是否可能有一点明智的意义?所以你首先对 foo 执行一些位操作,然后对结果执行 ! ?但我似乎不记得 ! 被用作有点明智的运算符,并且似乎也没有找到任何引用告诉我它是。据我所知, ! 仅用作逻辑运算符,在这种情况下

!!foo == foo

最佳答案

这不是双重否定那么简单。例如,如果你有 x == 5,然后应用两个 !运算符(!!x),它将变为 1 - 因此,它用于规范化 {0, 1} 范围内的 bool 值。

请注意,您可以将零用作 bool 值 false,将非零值用作 bool 值 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;
}

打印 foo != !!foo

关于c++ - 因使用双重逻辑非 (!!) 运算符而感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16191446/

相关文章:

c++ - opencv 2.3 copyTo 函数无法像在 2.2 中那样工作

c++ - 使用 Boost C++ 的多线程 - 同步问题

c++ - 带 INCLUDEPATH 的 qmake 忽略依赖项

javascript - 打印所有可以通过放置空格组成的字符串

Javascript 逻辑运算符困惑

php - != 和 !== 之间的区别

c++ - 在命名空间 block 中定义类方法和使用::定义它们有什么区别?

c - 在 c 中查找小于的按位运算符

javascript - 确定限制的智能方法

c - 将表示有符号整数的字节数组转换为整数的公式