c# - 什么是显示 XOR 语句的优雅方式

标签 c# java c syntax

确保条件遵循条件的简短(且可读!)方法是什么:

如果 a 为真,则运行代码。

如果 b 为真,则运行代码。

如果 a 和 b 都为真,则不运行代码。

一种方式是嵌套:

if (a || b)
{
    if(!(a && b))
    {
         //Code
    }
}

这很冗长,但也许更容易传达意图?

我们可以通过以下方式稍微缩短它:

if((a||b) && (!a&&b))

但这有点神秘,尤其是在变量名很长的情况下。

我错过了什么吗?有没有更好的写法?

最佳答案

您可以按照其他人的建议使用 ^,但要小心,因为它也是一个按位异或。关于何时用于按位以及何时用于逻辑的确切行为因语言和数据类型而异。

例如,在 Java 中确保 A 和 B 是 boolean 类型,这样就没问题。

在 c 中,如果你为整数 ij 做了;

if (i ^ j) {
}

然后它会对 i 和 j 进行按位异或,然后如果结果为 0,则结​​果将被处理为 false,否则为 true。

在 Java 中这会给你一个语法错误,因为表达式的结果不是 boolean 值。

一些可行的替代方案:

C/C++:

(!i ^ !j) 
// The ! converts i to boolean.
// It also negates the value but you don't need to reverse it back as you are comparing the relative values

C#/Java:

(A ^ B)
// Make sure A or B are boolean expressions, you will get a compile time error if they are not though.

关于c# - 什么是显示 XOR 语句的优雅方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21131836/

相关文章:

c# - 判断资源是否存在于 ResourceManager 中

c# - 在控制台应用程序中使用某些条件覆盖方法

C#如何重写这样的?

java - 未加载应用程序特定语言环境变体的 DateFormatProvider 实现

java - 尝试使图像随机移动但它没有移动

javascript - 使用 NodeJS 中的变量启动 C 程序

c - 带有 Char 数组的结构正在打印垃圾...如何解决?

c# - 从屏幕上的控件分离后,RichTextBox 文本在 VisualBrush 中消失

java - (Java) 绘制的矩形不出现

c - PCSC 阅读器模拟器