C,快速将数字限制为< = 64

时间:2018-05-23 16:03:40

标签: c

将数字限制为64(即。< = 64)

的最快方法
len = len > 64 ? 64 : len; /* limit to 64 */

谢谢!

2 个答案:

答案 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

因此优化可执行文件的最佳方法是获得一个好的编译器。