C++ 条件语句(给定)
有没有办法在一个条件语句中编写以下语句 a和b不能同时等于5。(a可以是5,b可以是5,但a和b不能是5) 谢谢你,克里斯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) 但值得注意的是,位运算符不会短路。这与异或无关,因为两个操作数都必须求值,但了解其他操作可能很重要 (布道警告:在几乎所有情
谢谢@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
。另外,后者可能会溢出。