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