几个关于位运算的几个宏定义函数
晚上写了几个关于位运算的宏函数,不是很多,也就是几个,贴出来给大家看看!有兴趣的坛友也可以帮忙在增加几个!关于掩码的位运算我没有写宏函数 ,觉得这方面的知识是变化的,但是只要掌握了有关位运算的一些基本的知识,相信不会成为太大的问题的!
//用来判断是奇数还是偶数,当结果是1的时候表明这个数是奇数,
//当结果是0的时候表明这个数是偶数
#define IS_ODD(x) ((x)&1)//通过
//得到一个int类型数据x的第y位的值
#define BITGET(x , y) (((x) >> (y - 1))&1)
//将一个int型数据x的第k位清0
#define SETZERO(x , k) ((x)&~(1 << (k - 1)))
//将一个int型数据x的第k位置1
#define SETONCE(x , k) ((x) | (1 << (k - 1)))
//对于两个整数x,y,如果用 (x+y)/2 求平均值,会产生溢出,
//因为 x+y 可能会大于INT_MAX,但是我们知道它们的平均值是肯定不会溢出的
#define AVERAGE(x , y) (((x)&(y)) + (((x)^(y)) >> 1))
//判断一个整数是不是2的幂,对于一个数 x >= 0,判断是不是2的幂
#define POWER2(x) (((x&(x - 1)) == 0)&&(x != 0))
//计算绝对值
#define ABS(x) (((x)^((x) >> 31)) - ((x) >> 31))
//相反数
#define OPPX(x) (~(x) + 1)