将数字限制为64(即。< = 64)
的最快方法len = len > 64 ? 64 : len; /* limit to 64 */
谢谢!
答案 0 :(得分:4)
不要打扰。编译器会比您更好地优化。
你可能会尝试
len = ((len - 1) & 0x3f) + 1;
(但 len
为0或65时等...... - 这可能不会给你想要的东西)
如果这对您来说非常重要,那么基准!
答案 1 :(得分:3)
我创建了一个程序
#include <stdio.h>
int main(void) {
unsigned int len;
scanf("%u", &len);
len = len > 64 ? 64 : len;
printf("%u\n", len);
}
并使用gcc -O3
编译并生成此程序集:
cmpl $64, 4(%rsp)
movl $64, %edx
leaq .LC1(%rip), %rsi
cmovbe 4(%rsp), %edx
leaq
在其间加载"%u\n"
字符串 - 我认为这是因为指令的时间。生成的代码似乎非常有效。没有跳跃,只是有条件的移动。否branch prediction failure。
因此优化可执行文件的最佳方法是获得一个好的编译器。