写一个宏定义,不用<,>号和?号,判断正整数a,b的大小
解答
三元运算符
define max(a,b) (((long)(a-b)) & 0x80000000)?b:a
0x80000000 的二进制是:1000 0000 0000 0000 0000 0000 0000 0000(第一位是符号位,所以此数是负数)
如果a-b是正数,那根据二进制数的表示, 分为符号位跟数值位,0正1负,所以a-b的最高位是0,那么与上1000 0000 0000 0000 0000 0000 0000 0000之后,三元运算符判断条件结果是0,输出a
如果a-b是负数,那最高位是1,与上1000 0000 0000 0000 0000 0000 0000 0000之后,三元运算符判断条件结果是1,输出b