经典位运算收集

收集在各个开源项目中遇到的经典的位运算代码:

types_c.h

/* min & max without jumps */
#define CV_IMIN(a, b) ((a) ^ (((a)^(b)) & (((a) < (b)) - 1)))
/* 若a<b,则 ((a) < (b)) - 1) = 1 - 1 = 0,
    ((a)^(b)) & 0 = 0,
    (a) ^ 0 = a
    所以返回a;
    若a>b,则((a) < (b)) - 1) = 0 - 1 = -1,假设类型为int,则结果为0xffff
    ((a)^(b)) & 0xffff = (a)^(b),
    (a) ^ (a)^(b) = b
    所以返回b;
*/

#define CV_IMAX(a, b) ((a) ^ (((a)^(b)) & (((a) > (b)) - 1)))

/* absolute value without jumps */
#define CV_IABS(a) (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0))

/*compare*/
#define CV_CMP(a,b) (((a) > (b)) - ((a) < (b)))
// a>b则返回1,a<b则返回-1

/*juage sign*/
#define CV_SIGN(a) CV_CMP((a),0)

 

posted on 2013-03-20 16:03  suwen  阅读(177)  评论(0编辑  收藏  举报

导航