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