锁定老帖子 主题:不用判断语句求俩数中的大(或者小)数
精华帖 (0) :: 良好帖 (16) :: 新手帖 (3) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-10
估计那人是考你数学知识应用。。 LZ杯具。。
|
|
返回顶楼 | |
发表时间:2009-12-10
tinywind 写道 static int max(int a, int b){
int r[]={a,b}; return r[(a-b)>>>31]; } 汗 |
|
返回顶楼 | |
发表时间: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); |
|
返回顶楼 | |
发表时间: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) |
|
返回顶楼 | |
发表时间:2009-12-10
int result= a>b ? a : b;
|
|
返回顶楼 | |
发表时间:2009-12-10
楼主的方法肯定不行,如果a,b是负数怎么办?
还有,直接用(a-b)>>31这种办法的有没有想过溢出的情况? |
|
返回顶楼 | |
发表时间: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); } } |
|
返回顶楼 | |
发表时间:2009-12-10
幸存者 写道 楼主的方法肯定不行,如果a,b是负数怎么办? 还有,直接用(a-b)>>31这种办法的有没有想过溢出的情况? 恩,被你说中了,我这个只是正整数适用 |
|
返回顶楼 | |
发表时间:2009-12-10
a-b>0?true:false
没有if else |
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |