论坛首页 Java企业应用论坛

不用判断语句求俩数中的大(或者小)数

浏览 47982 次
精华帖 (0) :: 良好帖 (16) :: 新手帖 (3) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-12-10  
估计那人是考你数学知识应用。。 LZ杯具。。
0 请登录后投票
   发表时间:2009-12-10  
tinywind 写道
  static int max(int a, int b){
    int r[]={a,b};
    return r[(a-b)>>>31];
  }


0 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10
tinywind 写道
  static int max(int a, int b){
    int r[]={a,b};
    return r[(a-b)>>>31];
  }



(刚刚修改了:一开始没考虑到两个相等的情况 ……)
或者
int mask = ((a-b) >>> 31) - 1;
return (a & mask) | (b & ~ mask);

1 请登录后投票
   发表时间:2009-12-10  
night_stalker 写道
tinywind 写道
  static int max(int a, int b){
    int r[]={a,b};
    return r[(a-b)>>>31];
  }



或者
b*((a-b)>>>31) + a*((b-a)>>>31)


0 请登录后投票
   发表时间:2009-12-10  
int result= a>b ? a : b;
0 请登录后投票
   发表时间:2009-12-10  
楼主的方法肯定不行,如果a,b是负数怎么办?

还有,直接用(a-b)>>31这种办法的有没有想过溢出的情况?
0 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10


这样不是也很方便么?
public class ChageAtoB {

	/**
	 * 修改人: bestupon 修改时间:2009-11-1 上午11:43:58 修改目的:
	 */
	public static void main(String[] args) {
		int a = 1;
		int b = 2;
		a = a ^ b;
		b = b ^ a;
		a = a ^ b;
		System.out.println(a + "," + b);
		a = 1;
		b = 2;
		a = a + b;
		b = a - b < 0 ? b - a : a - b;
		a = a - b < 0 ? b - a : a - b;
		System.out.println(a + "," + b);
		a = 1;
		b = 2;
		a = a * b;
		b = a / a;
		a = a / b;
		System.out.println(a + "," + b);
	}

}
 
0 请登录后投票
   发表时间:2009-12-10  
幸存者 写道
楼主的方法肯定不行,如果a,b是负数怎么办?

还有,直接用(a-b)>>31这种办法的有没有想过溢出的情况?

恩,被你说中了,我这个只是正整数适用
0 请登录后投票
   发表时间:2009-12-10  
a-b>0?true:false

没有if else
0 请登录后投票
   发表时间:2009-12-10  
try{
    try{
      int c = a-b + Integer.maxValue;
      throw new ALessThanBException()
    }catch(Exception){
      throw new AMoreThanBException()
    }

}catch(ALessThanBException exp){
return false;

}catch(AMoreThanBException){
  return true;
}
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics