天天看点

写一个宏定义,不用大于号小于号和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的大小。