在我的程序中,我有一个函数,它接受一个总是2的幂(从不为零)的字节,并将1(高位)的位置作为整数返回。
e.g. f(0010 0000) -> 2, f(0000 0001) -> 7
这个C程序必须运行这个功能数百万次,所以我需要它非常快。我已经为这个功能写了两个实现,但我真的不知道哪个更快。
int f(unsigned char bit) {
//ln2 is the log base e of two. Basically I'm doing 7 minus log base 2 of the input
return (int)(7 - round(log(bit) / ln2));
}
int f(unsigned char bit) {
if (bit == 0x00) /**/ return 0;
else if (bit == 0x01) return 7;
else if (bit == 0x02) return 6;
else if (bit == 0x04) return 5;
else if (bit == 0x08) return 4;
else if (bit == 0x10) return 3;
else if (bit == 0x20) return 2;
else if (bit == 0x40) return 1;
else if (bit == 0x80) return 0;
}
我没有计算机科学教育,我只是一个业余爱好者,所以很多这些问题我很难自己解决。我认为log()函数很慢,但我知道如果语句占用周期并且分支预测会导致内容变慢。老实说,我不知道这是否正确,只是猜测。
任何人都能为我提供更快的知识吗?为什么?或者,如果您有其他选择,甚至更好的方式我愿意接受建议!谢谢!