今天分享一個有意思的題目,考察了兩個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的大小。