Skip to content

Latest commit

 

History

History
32 lines (23 loc) · 652 Bytes

位运算的绝妙用法.md

File metadata and controls

32 lines (23 loc) · 652 Bytes

求最值

使用?:比较两数的大小常用如下方法:

#ifndef MIN
#define MIN(a,b)  ((a) > (b) ? (b) : (a))
#endif

#ifndef MAX
#define MAX(a,b)  ((a) < (b) ? (b) : (a))
#endif

如今在OpenCV的core/../types_c.h中发现了如下的不使用跳转就能比较两数大小:

/* min & max without jumps */
#define  CV_IMIN(a, b)  ((a) ^ (((a)^(b)) & (((a) < (b)) - 1)))

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

求绝对值

#define  CV_IABS(a)     (((a) ^ ((a) < 0 ? -1 : 0)) - ((a) < 0 ? -1 : 0))