6.7 如何按要求比较两个数的大小
2025年09月21日
6.7 如何按要求比较两个数的大小
【出自TX笔试题】
难度系数:★★★★☆ 被考察系数:★★★★☆
题目描述:
如何比较a、b两个数的大小(返回最大值),不能使用大于、小于。
分析与解答:
方法一:绝对值法
根据绝对值的性质可知,如果|a-b|==a-b,那么max(a,b)=a,否则max(a,b)=b,根据这个思路实现代码如下:
或
程序的运行结果如下:
6
需要注意的是,由于宏定义不同于函数定义,在上述宏定义中,a、b必须要有括号,否则当a、b的值为表达式的时候会出现意想不到的错误。
方法二:二进制法
如果a>b,那么a-b的二进制最高位为0,与任何数的与操作的结果还是0;如果a-b为负数,那么a-b的二进制最高位为1,与0x80000000(最高位为1,其他位为0,假设a与b都占4个字节)执行与操作之后为结果为1。由此根据两个数的差的二进制最高位的值就可以比较两个数的大小,实现方法如下:
((a-b)&(1<<31))!=0?b:a
或
(((a-b))&0x80000000)!=0?b:a