【发布时间】:2015-08-02 10:19:07
【问题描述】:
我有一个int 类型的参数num,用户可以给它以下两个值之一:0 或1。
我可以用显而易见的方法来检查它:
if (num < 0 || num > 1)
print("The parameter value is incorrect.\n");
但我想知道是否有更好的(更快?更少的代码?)来做到这一点?
编辑
这是一些数据流代码,因此性能至关重要。我正在寻找一种更快的方法来运行此检查。
谢谢
【问题讨论】:
-
在代码中冗长是可以的 - 它通常使其更具可读性 - 因此可维护
-
优化这个的动机是什么?为什么要降低代码的可读性、难以维护和可能不那么健壮?
-
@PaulR - 这个问答的动机是,如果有人需要在数据流路径中运行这种检查,其中每个额外的
if、!=或<占用额外的(宝贵的)时间,他们将有地方查找它。我实际上并没有检查这里建议的不同解决方案的运行时间,但我很确定x & ~1比x!=0 && x!=1快。 -
是的,请停止这种混淆。调试/维护/增强自己的代码已经够糟糕了,但是如果你从其他人那里继承了这种东西,除了源代码级别的明显可见之外,你什么都不想看到。
-
@shapiro.yaacov:您对性能的假设很可能是错误的(取决于 CPU 和编译器),并且您犯了不首先测量性能的主要罪行。这通常被称为过早优化,有很多很好的理由可以避免它。首先进行分析,确定热点,然后仅在绝对必要时进行优化。
标签: c