奇技淫巧
介绍一些提升程序性能的小技巧,很多代码来自网上,我将引用放到末尾的 seealso 中
快速范围判断
如果判断 x 是否在 [min, max] 内,可以写成:
if (( (x - min) | (max - x) ) >= 0)
另一种性能更均衡的情况写法是:
if ((unsigned)(x - minx) <= (unsigned)(maxx - minx))
如果数据 99% 都是超出范围的那继续用普通写法更快
整数跨俗除以 255
#define div_255_fast(x) (((x) + (((x) + 257) >> 8)) >> 8)
当 x 属于 [0, 65536] 范围内,该方法的误差为 0
将数字裁剪到 255
假设某整数数值需要控制在 0 - 255 的范围,如果小于 0 那么等于零,如果大于 255,那么等于 255
static inline int32_t clamp_to_65535(int32_t x) {
return (((65535 - x) >> 31) | x) & 65535;
}