众所周知在很多倍增或者什么的题目会用到 log2n 的运算,然后有些人会把 1~n 所有的 log2 预处理一遍实现 O(1) 查询,然后我用的是 std::__lg,是用 __builtin_clz 实现的,但是我用这个网站翻译成汇编发现是 __builtin_clz 用 bsr 实现的,这不是相当于暴力扫一遍??
但是实践一下:
预处理1 log2:498ms
预处理2 log2:494ms
每次直接计算 std::__lg:448ms
如此大的差异显然不是评测机波动,那么为什么 __builtin_clz 这么快,甚至比数组寻址还要快呢?
还是说汇编使用了神奇的方式飞速 bsr?