奇技淫巧

介绍一些提升程序性能的小技巧,很多代码来自网上,我将引用放到末尾的 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;
}
Last moify: 2022-12-04 15:11:33
Build time:2025-07-18 09:41:42
Powered By asphinx