有没有办法优化此声明?

时间:2015-04-27 03:54:00

标签: c optimization

我有两个chars1s2并且有一个声明

if ((s1 && !s2) || (!s1 && s2)) 

但我认为这是多余的,因为计算涉及分别查看s1!s1s2!s2同样相同。因为,通过查看s1s2,您已经掌握了!s1!s2的基础信息。有没有办法压缩这个陈述?

4 个答案:

答案 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