如何按要求比较两个数的大小(不使用大于、小于以及if语句)

题目描述:

  如何比较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));

	}

}

运行结果:

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值