让我们举一个假设两条线做同样事情的简单例子:
if(value> = 128 || value< 0) ...
或
if(value& ~127) ...
说'如果在数千次迭代的循环中成本很高,是否更好地保持传统的C语法或更好地找到二进制优化的语法?如果可能的话?
答案 0 :(得分:3)
我会使用传统语法的第一个语句,因为它更具可读性。 用第二个陈述可以打破眼睛。
关心将在您之后使用该代码的程序员。
答案 1 :(得分:3)
在100个中的99个案例中,做一个更具可读性并更好地表达你意图的案例。
答案 2 :(得分:1)
理论上,编译器会为您进行这种优化。在实践中,他们可能不会。这个特殊的例子有点微妙,因为这两个不相等,除非你对value
做出一些假设,以及你的目标平台上的带符号算术是否是2的补码。
使用您认为更具可读性的产品。如果您有证据证明此特定测试的性能至关重要,请使用能够为您提供最佳性能的产品。就个人而言,我可能会写:
if ((unsigned int)value >= 96U)
因为这对我来说更直观,而且我与之合作的大多数编译器都更有可能得到妥善处理。
答案 3 :(得分:1)
这取决于检查的方式/地点。如果在程序启动期间进行一次检查以检查命令行参数,那么性能问题就完全没有用了,你应该使用更自然的东西。
另一方面,如果检查是在某个内循环内部,每秒发生数百万次,那么它可能很重要。但不要以为一个人会更好;你应该创建两个版本并计算它们,看看两者之间是否存在任何可衡量的差异。