经典位运算收集
收集在各个开源项目中遇到的经典的位运算代码:
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)