6.7  如何按要求比较两个数的大小

6.7 如何按要求比较两个数的大小

【出自TX笔试题】

难度系数:★★★★☆ 被考察系数:★★★★☆

题目描述:

如何比较a、b两个数的大小(返回最大值),不能使用大于、小于。

分析与解答:

方法一:绝对值法

根据绝对值的性质可知,如果|a-b|==a-b,那么max(a,b)=a,否则max(a,b)=b,根据这个思路实现代码如下:

978-7-111-61212-4-Part02-333.jpg

978-7-111-61212-4-Part02-334.jpg

程序的运行结果如下:

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