将布尔值更改为与初始值相反

Posted

技术标签:

【中文标题】将布尔值更改为与初始值相反【英文标题】:Changing bool values to opposite of the initial value 【发布时间】:2013-08-03 19:21:22 【问题描述】:

这对你来说可能听起来很奇怪,但我懒得每次都写

if (threadAlive)

            threadAlive = false;

        else

            threadAlive = true;

难道没有类似 int++ 或 int-- 的东西可以将 bool 值更改为与其值相反的值吗?

【问题讨论】:

Can I 'invert' a bool?的可能重复 【参考方案1】:

这样做:

threadAlive = !threadAlive;

【讨论】:

@user1046403 在 C / C++ 中,您可以编写一个自定义运算符,使其更简单,在 C# 中,这已经足够了。 即使您可以编写自定义运算符,也请帮大家一个忙,不要这样做。 b = !b 对任何了解该语言的人来说都是惯用的。 也许会有类似 threadAlive 的东西!!那将是真棒。我怎么能写一个自定义运算符?有什么帮助吗? 您的问题已解决。不要试图让它变得更糟。 (另外,请为 C 或 C++ 或 C# 或任何您正在学习的任何一种选择一些学习材料) @p.s.w.g 在 C 中,没有自定义运算符。在 C++ 中,自定义运算符的至少一个参数必须是用户定义类型,或对用户定义类型的引用,bool 不是。 (当然,在任何一种语言中,您都可以编写一个宏来执行此操作。这种技术通常被称为混淆。)【参考方案2】:

是的,有!

threadAlive ^= true;

(这是一个 C# 笑话,在大多数情况下,它在 C/C++/javascript 中不起作用(根据某些条件,它可以在 C/C++/Javascript 中起作用),但是是真的!^ 是异或运算符)

【讨论】:

我没想到它可以在 C# 中工作,但确实如此。为独创性 +1。 这是个糟糕的笑话,因为没有指定 threadAlive 的类型。这将导致"not true" 对于int大部分 值是“真”,例如 @sehe 有一个C# 标签。但添加了关于语言的注释。 它也应该在 C++ 中工作,前提是 threadAlive 的类型为 bool (并且由于他在 if 中使用它作为条件,这应该是一个安全的假设——尽管该语言确实允许其他类型,通过隐式转换,我什至看到一些程序员使用它们)。 @sehe 原始问题标有布尔标记,所以我认为这是一个公平的假设。不要以为他重新定义了问题,这也是最优雅的解决方案。【参考方案3】:

这样就可以了:

threadAlive = !threadAlive;

正确的词是Toggle

【讨论】:

【参考方案4】:

逻辑否定运算符! 是一个对其操作数取反的一元运算符。它是为bool 定义的,当且仅当它的操作数是falsefalse 当且仅当它的操作数是true 时才返回true

threadAlive = !threadAlive;

【讨论】:

【参考方案5】:

使用! 运算符:

bool b = true;

b = !b;   // b is now false

【讨论】:

【参考方案6】:

如果你正在寻找基本类型,你不能overload operators。

正如其他人已经提到的,这是迄今为止你最好的选择:

threadAlive = !threadAlive;

但是,您可以创建自己的 bool 类型并重载 ++ 或任何您希望反转值的运算符,尽管我不建议这样做。

以下代码无论如何都应该永远使用:

public class MyBool

    bool Value;

    public MyBool(bool value)
    
        this.Value = value;
    

    public static MyBool operator ++(MyBool myBoolean)
    
        myBoolean.Value = !myBoolean.Value;
        return myBoolean;
    

您也可以创建自己的扩展方法,但这也不是更好的方法。

【讨论】:

【参考方案7】:

很简单:

threadAlive = ! threadAlive;

【讨论】:

以上是关于将布尔值更改为与初始值相反的主要内容,如果未能解决你的问题,请参考以下文章

如何更改数组中的布尔值?

KeyError:在熊猫中尝试使用.loc方法将布尔列值更改为字符串时

从 void 和 boolean 方法返回多个值

为啥是布尔值和布尔值

如何在 Python 中获得布尔值的相反(否定)?

我想将布尔数组中的所有值设置为 false 而不重新初始化它