首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对双逻辑not (!!)的使用感到困惑运算符

问对双逻辑not (!!)的使用感到困惑运算符
EN

Stack Overflow用户
提问于 2013-04-24 20:00:16
回答 5查看 11.4K关注 0票数 33

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

当!!真正有意义时,有没有任何地方和/或原因?我在想,它是否可能有一点明智的意义?因此,您首先对foo执行一些位明智操作,然后对结果执行!?但我似乎不记得!被用作一个聪明的运算符,似乎也没有找到任何参考资料告诉我它是。据我所知,!只用作逻辑运算符,在这种情况下

!!foo == foo

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-04-24 20:03:11

它不像双重否定那么简单。例如,如果你有x == 5,然后应用两个!运算符(!!x),它将变成1- so,它用于归一化{0, 1}范围内的布尔值。

请注意,您可以使用0作为布尔值false,使用非零值表示boolean true,但您可能需要将结果规范化为0或1,这就是!!有用的时候。

它与x != 0 ? 1 : 0相同。

另外,注意,如果foo不在{0, 1}集合中,这将不是真的:

!!foo == foo

代码语言:javascript
复制
#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。

票数 53
EN

Stack Overflow用户

发布于 2013-04-24 20:02:15

它可以作为将foo转换为布尔表达式的简写。出于某些原因,您可能希望将非布尔表达式专门转换为true或false。

如果foo为非零,foo = !!foo将把它转换为1,如果它已经是非零,则将其保留为0。

票数 9
EN

Stack Overflow用户

发布于 2013-04-24 20:02:08

如果为foo != 0,则为!!foo == 1。这基本上是一个转换为bool的技巧。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16191446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档