题目描述:
如何比较a、b两个数的大小,不使用大于、小于以及if语句。
分析:
方法一:绝对值
根据绝对值的性质可知,如果|a-b|==a-b,那么max(a,b)=a;否则max(a,b)=b,根据这个思路实现。
实现代码:
package lock;
public class T18 {
public static int max(int a,int b)
{
return Math.abs(a-b)==(a-b)?a:b;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(max(8,10));
}
}
运行结果:
需要注意的是,由于宏定义不同于函数定义,在上述宏定义中,a、b必须有括号,否则当a、b的值为表达式的时候就会出现意想不到的错误。
方法二:二进制法
如果a>b ,那么a-b的二进制最高为0,与任何数的操作的结果还是0;如果a-b为负数,那么a-b的二进制最高位为1,与0x80000000(最高位为1,其他位为0,假设a与b都占4个字节)执行“与”操作之后结果为1.由此可以根据两个数的二进制最高位就可以比较两个数的大小,实现方法如下:
package lock;
public class T18 {
public static int max(int a,int b)
{
return Math.abs((a-b)&(1<<31))!=0?b:a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(max(58,88));
}
}
运行结果:
或
package lock;
public class T18 {
public static int max(int a,int b)
{
return Math.abs(((a-b))&0x8000000)!=0?b:a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.print(max(56,28));
}
}