定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

时间:2021-04-28 23:18:52

第一种定义方法:

#define max(a,b) (((long)((a)-(b))&0x80000000)?(b):(a))

这里用到了与操作若是负数最高位肯定为1 与的结果肯定不为而若a大于b最高位为0与的结果会得到0

第二种方法:

#define max(a,b) ((((a)-(b))+fabs((double)(a-b)))?(a):(b))

用了绝对值的技巧

若a大于a-b的绝对值为a-b加上a-b后结果不为0a小于ba-b的绝对值为b-a加上a-b后结果为0