我有以下逻辑,需要简化以使其更简洁明了:
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
答案 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;
但这可能不太清楚,可能还为时过早。