【发布时间】:2011-05-01 09:02:52
【问题描述】:
有什么办法可以优化下面这行C代码(避免分支)?
if (i < -threshold || i > threshold) {
counter++;
}
所有变量都是 16 位有符号整数。优化后的版本应该是高度可移植的。
【问题讨论】:
-
你说“两者”,但有三个变量。
-
不记得这是否确实有效,但请尝试
if((unsigned int)i > threshold) -
@zdav 它绝对不适用于大多数编译器。这样的强制转换至少是实现定义的,通常可以得到 2 的补码。
-
@Pascal:错误。到无符号的转换完全由语言规范定义。但是,它的定义与 zdav 的想法不同(它不是绝对值)。
-
@R.. 嘿,放轻松,其他人在指出错误时不觉得有必要使用BOLD AND CAPITALS。
标签: c optimization math