对于通过定义宏来比较两个数的大小通常方式为:
#define Max(a,b) (a>b)?a:b
当碰到的笔试题目通常会有限制条件,例如不准使用> <
在此条件的限制下我们可以
#define MAX4(a,b) (((a)-(b)) & 0x80000000 ) ? (b) : (a)
#define MAX(a,b) (abs((a)-(b))==((a)-(b))?(a):(b))
但这样只能对整数进行正确的比较,因为abs接收及返回的都是整数值,所以当a,b为浮点类型时我们可以将abs换成fabs
#define MAX(a,b) (abs((a)-(b))==((a)-(b))?(a):(b))当增加限制条件时例如不能使用"if,?:switch"的时候一般通过位移解决
#define MAX(a, b) (((b) - (a) & (0x1 << 31)) >> 31)