天天看點

寫一個宏定義,不用大于号小于号和if,判斷正整數a,b的大小

今天分享一個有意思的題目,考察了兩個C語言容易被忽視的知識點。

題目:

寫一個宏定義,不用大于号>、小于号<和if,判斷正整數a,b的大小。

一種答案:

解答:

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

考察知識點:

1、與或非 

2、三元運算符

拔高題(大廠筆試題):

寫一個宏定義,不用大于号>、小于号<和問号?,判斷正整數a,b的大小。