论坛首页 Java企业应用论坛

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

浏览 48015 次
精华帖 (0) :: 良好帖 (16) :: 新手帖 (3) :: 隐藏帖 (1)
作者 正文
   发表时间:2009-12-10  
或者
try{
      int c = a-b + Integer.maxValue;
       return false;
    }catch(Exception){
      return true;
    }
0 请登录后投票
   发表时间:2009-12-10  
guoapeng 写道
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 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10
好吧,考虑溢出的,不管正负都 OK 的版本:

int r[][][] = {{{a,b}, {a,a}}, {{b,b}, {a,b}}};
return r[a >>> 31][b >>> 31][(a - b) >>> 31];


(刚刚又修改了一下,让它看起来更神奇 
0 请登录后投票
   发表时间:2009-12-10   最后修改:2009-12-10
night_stalker 写道
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);



贼个是与机器码相关的(IL也算某种机器码),虽然Java fix的int的长度。
0 请登录后投票
   发表时间:2009-12-10  
haojia0716 写道
我也出一个题.
不能用任何语言,包括机器语言,汇编,中级语言,高级语言,比较两数大小,要求能在电脑上运行出结果.

你说那两个数分别是多少,我马上给出答案。
0 请登录后投票
   发表时间:2009-12-10  
haojia0716 写道
我也出一个题.
不能用任何语言,包括机器语言,汇编,中级语言,高级语言,比较两数大小,要求能在电脑上运行出结果.


无聊吧,我自己在屏幕上按出结果成不
0 请登录后投票
   发表时间:2009-12-10  
用hashmap 也可以实现:
c = a-b;
用移位操作取得符号位的值 0 或1

hashmap 里的初始值 0, true
                  1,false

然后根据符号位,取得 true 或者 false
返回。
0 请登录后投票
   发表时间:2009-12-10  
64位机怎么办
0 请登录后投票
   发表时间:2009-12-10  
呵呵,这个问题不错,引出这么多后续的有趣的问题
0 请登录后投票
   发表时间:2009-12-10  
iaimstar 写道
64位机怎么办

java int 仍然是 32 位,标准规定了的。
0 请登录后投票
论坛首页 Java企业应用版

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