C++ 条件语句(给定)

C++ 条件语句(给定),c++,C++,有没有办法在一个条件语句中编写以下语句 a和b不能同时等于5。(a可以是5,b可以是5,但a和b不能是5) 谢谢你,克里斯 谢谢@chris正如chris所指出的,您要寻找的是逻辑异或,它相当于逻辑不等于=: if ((x == 5) != (y == 5)) 我很想用按位异或编写它,因为它可读性更高,并且可以立即识别为异或: if (x == 5 ^ y == 5) 但值得注意的是,位运算符不会短路。这与异或无关,因为两个操作数都必须求值,但了解其他操作可能很重要 (布道警告:在几乎所有情

有没有办法在一个条件语句中编写以下语句

a和b不能同时等于5。(a可以是5,b可以是5,但a和b不能是5)

谢谢你,克里斯


谢谢@chris

正如chris所指出的,您要寻找的是逻辑异或,它相当于逻辑不等于
=

if ((x == 5) != (y == 5))
我很想用按位异或编写它,因为它可读性更高,并且可以立即识别为异或:

if (x == 5 ^ y == 5)
但值得注意的是,位运算符不会短路。这与异或无关,因为两个操作数都必须求值,但了解其他操作可能很重要


(布道警告:在几乎所有情况下,不要在布尔上下文中使用逐位运算符。有些运算符的语义稍有不同,并且由于它们不短路,因此可能会出现一些非常奇怪的gotcha。)

正如chris指出的,您要找的是逻辑异或,它相当于逻辑不等于
=

if ((x == 5) != (y == 5))
我很想用按位异或编写它,因为它可读性更高,并且可以立即识别为异或:

if (x == 5 ^ y == 5)
但值得注意的是,位运算符不会短路。这与异或无关,因为两个操作数都必须求值,但了解其他操作可能很重要


(布道警告:在几乎所有情况下,不要在布尔上下文中使用位运算符。有些运算符的语义稍有不同,并且由于它们不短路,可能会出现一些非常奇怪的gotcha。)

哦,完全误读//如果(a!=5 | | b!=5)都不等于允许的5,则失败?哦,完全误读//如果(a!=5 | | b!=5)都不等于5,则失败?存在逻辑异或。它写为!=@克里斯:是的,
x!=y
表示
x^y
。但它不能很好地推广到x和y的表达式。如何用
简洁地表达=此处的预期逻辑?我觉得我现在错过了一些明显的东西:)。它不太适合识别为XOR,但它应该是
(x==5)!=(y==5)
@chris啊,这可不像我想的那么恶心。我试图加入一个额外的
(x==5 | y==5)
比如
(x==5 | y==5)&((x==5)!=(y==5))
。现在我看到
(x==5 | | y==5)
暗示了前面的内容。我已经更新了我的答案以记录!=。有一个逻辑异或。它写为!=@克里斯:是的,
x!=y
表示
x^y
。但它不能很好地推广到x和y的表达式。如何用
简洁地表达=此处的预期逻辑?我觉得我现在错过了一些明显的东西:)。它不太适合识别为XOR,但它应该是
(x==5)!=(y==5)
@chris啊,这可不像我想的那么恶心。我试图加入一个额外的
(x==5 | y==5)
比如
(x==5 | y==5)&((x==5)!=(y==5))
。现在我看到
(x==5 | | y==5)
暗示了前面的内容。我已经更新了我的答案以记录!=。我会找到
a!=b
比a+b更容易理解10
。加上后者可能会溢出。我会发现
a!=b
比a+b更容易理解10
。另外,后者可能会溢出。