本篇介绍一组非常简单却又很常用的数值计算的宏实现。本篇所提到的数值计算问题,相信C语言初学者都能做得出来,但是本篇中给出的例子实现却更注重效率。这些例子实现的最大特点是,消除了逻辑跳转。这样做的好处是避免了分支预测的风险,或者换句话说,可以更好地发挥处理器流水线的性能。由于本篇的问题都很简单,笔者就废话少说,直接看例子了。
/* 高位全0,低N位全1 */
#define Low_N_Bits_One(N) ((1<<N) -1)
/* 高位全1,低N位全0 */
#define Low_N_Bits_Zero(N) (~((1<<N) -1))
/* 低位第N位置1 */
#define Set_Bit_N(NUM, N) (NUM | (1 << (N - 1)))
/* 低位第N位置0 */
#define Clear_Bit_N(NUM, N) (NUM & (~(1 << (N - 1))))
/* 低位第N位反转 */
#define Reverse_Bit_N(NUM, N) ((NUM) ^ (1 << (N - 1)))
/* 上取整 */
#define UpRoun8(Num) (((Num) + 0x7) & (~0x7))
#define UpRoun16(Num) (((Num) + 0xf) & (~0xf))
#define UpRoun32(Num) (((Num) + 0x1f) & (~0x1f))
/* 下取整 */
#define LowRoun8(Num) ((Num) & (~0x7))
#define LowRoun16(Num) ((Num) & (~0xf))
#define