【问题标题】:Is there no XOR operator for booleans in golang?golang中的布尔值没有异或运算符吗?
【发布时间】:2022-04-13 23:40:09
【问题描述】:

golang 中的布尔值没有异或运算符吗?

我试图做类似b1^b2 的事情,但它说它不是为布尔值定义的。

【问题讨论】:

    标签: go operators logical-operators xor


    【解决方案1】:

    没有。 Go 确实提供a logical 异或运算符(即布尔值的异或),the bitwise XOR operator 仅适用于整数。

    但是,an exclusive-OR 可以用其他逻辑运算符重写。当忽略表达式(X 和 Y)的重新计算时,

    X xor Y -> (X || Y) && !(X && Y)
    

    或者,正如 Jsor 指出的那样,更琐碎,

    X xor Y <-> X != Y
    

    【讨论】:

    • 为什么没有内置的?我觉得很奇怪。
    • 虽然您对 XOR 的定义是正确的,但我会选择 x != y
    • @Jsor Doh。我经常错过显而易见的事情:|已更新。
    • 你可以说Go 确实有一个bool的异或运算符,它的拼写是!=
    • 一切都好,直到您需要boolVar XOR boolFunc()之类的东西
    【解决方案2】:

    对于布尔值,xor 很简单:

    if boolA != boolB {
    
    }
    

    在这种情况下,not equal to 执行与xor 相同的功能:只有当布尔值之一为真且一个为假时,该语句才能为真。

    【讨论】:

    • 显然(s == "test") != ( s == "not test") 不起作用
    • @Adonis 它有效。只有当 2 个操作数中只有 1 个为真时,异或才会返回真,并且在您的表达式中始终存在真假结果,并且false != true 为真,这与false XOR true 相同
    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 2013-03-02
    • 2012-09-20
    • 1970-01-01
    • 2013-06-06
    • 2013-07-07
    • 1970-01-01
    • 2011-03-12
    相关资源
    最近更新 更多