如何简化C语言中的逻辑运算

时间:2019-08-19 23:50:25

标签: conditional-statements logical-operators boolean-algebra

我有以下逻辑,需要简化以使其更简洁明了:

 if (x1 < y1)
    return 1;
 else if (x1 == y1)) {
     if (x2 < y2)
         return 1;
     else if (x2 == y2) {
         if (x3 < y3)
             return 1;
     } else 
         return 0;
     }
 } else
    return 0;

为了解决上述问题,我应用了逻辑表达式来进一步简化以下几行条件:

if (x1 < y1 || (x1 == y1 && x2 < y2) || (x1 == y1 && x2 == y2 && x3 < y3))
    return 1;
else
    return 0;

我不确定如何从这里进一步简化。谁能帮我吗?

更新: For further simplifying, I tried applying boolean algebra to this expression,但没有运气!我想出了这个:

A + (A1 * B) + (A1 * B1 * C)

其中A表示x1 < y1,而A1表示x1 == y2

1 个答案:

答案 0 :(得分:0)

IMO在C中完成这种链式关系的最干净方法是使用?:

return x1 == y1 ? x2 == y2 ? x3 < y3 : x2 < y2 : x1 < y1;

如问题注释中所述,如果您确实关心性能,并且值范围有限,则可以使用位扭曲将它们组合为单个值以进行比较。例如,如果所有字段都是uint16_t(无符号的16位值),则可以执行以下操作:

uint64_t x = ((uint64_t)x1 << 32) + ((uint64_t)x2 << 16) + x3;
uint64_t y = ((uint64_t)y1 << 32) + ((uint64_t)y2 << 16) + y3;
return x < y;

但这可能不太清楚,可能还为时过早。

相关问题