我有两个char
,s1
和s2
并且有一个声明
if ((s1 && !s2) || (!s1 && s2))
但我认为这是多余的,因为计算涉及分别查看s1
和!s1
,s2
和!s2
同样相同。因为,通过查看s1
和s2
,您已经掌握了!s1
和!s2
的基础信息。有没有办法压缩这个陈述?
答案 0 :(得分:6)
该声明是逻辑独占的,或者没有内置运算符。在某些限制下,您可以将其转换为按位 - 或^
,但更一般地,它可以写为
if ( !s1 != !s2 )
逻辑not
运算符!
会将0转换为逻辑true
值,并将任何其他值转换为逻辑false
值。然后可以使用!=
测试结果。
答案 1 :(得分:5)
我认为使用conditional operator ?:
运算符最容易阅读。
if (s1? !s2: s2) {
}
答案 2 :(得分:2)
如果两者都是布尔值:
if(s1 != s2)
答案 3 :(得分:1)
在我看来,你正在尝试进行XOR(异或)。一个或另一个变量是真的但不是两个或两者都不是。在C语言中,这是通过
完成的bool c = a^b