# 题目
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句
# 解题思路
(*  ̄︿ ̄)
不让用大于,小于,怎么比较大小!
( ̄ε(# ̄)☆╰╮( ̄▽ ̄///)
老师你过来我不打你!
=_=
让我们冷静一下
o( ̄▽ ̄)o
+ - * / 你们过来。
<( ̄︶ ̄)↗[GO!]
比较大小自然想到了两数相减,判断正负。
-。-
可是不让你[大于 小于 if]怎么判断正负呢?
o( ̄︶ ̄)o
自然只能考虑到位运算 我们知道负数使用link 补码表示的。也就是最高位是1,我们判断一下最高位是不是1就可以知道是不是负数了。
<( ̄▽ ̄)/
来来来!1<<31 变成除了最高位是1,其他位都是0,然后咩哈哈哈,和(a-b)&(1<<31)就知道了。
#define (a-b)&(1<<31) ? b : a
恩 上面就是答案了,但是!这是不完美的! 定义宏切记加()。
#define (((a)-(b))&(1<<31)) ? (b) : (a)
这个才是正确的答案。