为了求给定数的最高位二进制位置,想尝试使用IEEE754实现,据测试,可以实现,但事实上与std::log2无差别,甚至效率还比较低。
char Flog2(unsigned x) {
register float f = (float)x;
return (char)((*(unsigned*)&f) >> 23) - 127;
}
由IEEE754规定,binary32的定义为:
其中E<阶码>为8位,且最高位为浮点数值本身的符号位。故包括浮点值本身的符号位,阶码从23位开始。char本身是有符号类型直接用char表示即可。
没有考虑进一步的优化,比较如果把该代码展开成汇编,事实上就比log2长了不少,不如直接std::log2并转int什么的去掉小数。不过确实看浮点性能。