看到一个面试题,大家来讨论下!解决方案
看到一个面试题,大家来讨论下!
原帖见:今天去迅雷面试了,非常不爽
题目是:不用比较运算符,判断int型的a,b两数的大小。
我当时想到的,就是a-b然后判断最高位是1还是0,但是最后发现如果a=-2147483648,b=2147483647时,作为int型的数相减就越界了,并且符号位丢失了。其实不用那么极端的例子,因为两个不同符号的数,相减很容易越界。所以我在之前先判断a和b的符号位。于是就有了下面的代码:
当然了,也可以32位逐位比较。我想听听大家的好意见。
------解决方案--------------------
不用比较运算符, 就是说==号也不能用
(a >>> 31 == 0)
这里用到了等号
所以答案错误。只要是用到了if之类的,则必然要 true/false, 则必然涉及到比较运算符。
思考中...
------解决方案--------------------
不会啊 接分吧
------解决方案--------------------
不会 学习
------解决方案--------------------
------解决方案--------------------
可以用接口comparable来实现,只要实现它的方法compareTo()方法即可原理可以参考此接口的使用,我写了个例子,可以参考一下,结果是正确的。
原帖见:今天去迅雷面试了,非常不爽
题目是:不用比较运算符,判断int型的a,b两数的大小。
我当时想到的,就是a-b然后判断最高位是1还是0,但是最后发现如果a=-2147483648,b=2147483647时,作为int型的数相减就越界了,并且符号位丢失了。其实不用那么极端的例子,因为两个不同符号的数,相减很容易越界。所以我在之前先判断a和b的符号位。于是就有了下面的代码:
- Java code
System.out.println((((a >>> 31 == 0) && (b >>> 31 == 1))| (((a >>> 31)^(b >>> 31))==0)&&(((a-b)>>>31)==0))?"a>=b":"a<b");//同符号的相减;异号时a为正,则a>=b。
当然了,也可以32位逐位比较。我想听听大家的好意见。
- Java code
public class Bigger { public static void main(String args[]){ int a = -2147483648; int b = 2147483647; String[] strArray = {"a>=b", "a<b"}; int i = (int)((long)a-(long)b >>> 63); System.out.println(strArray[i]); } }
------解决方案--------------------
不用比较运算符, 就是说==号也不能用
(a >>> 31 == 0)
这里用到了等号
所以答案错误。只要是用到了if之类的,则必然要 true/false, 则必然涉及到比较运算符。
思考中...
------解决方案--------------------
不会啊 接分吧
------解决方案--------------------
不会 学习
------解决方案--------------------
------解决方案--------------------
可以用接口comparable来实现,只要实现它的方法compareTo()方法即可原理可以参考此接口的使用,我写了个例子,可以参考一下,结果是正确的。
- Java code
public class Test1 implements Comparable<Integer>{ private int a; public Test1(){ } public Test1(int c){ this.a=c; } public int getA() { return a; } public void setA(int a) { this.a = a; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int i=new Test1(-2147483648).compareTo(2147483647); if(i>0){ System.out.println("a>b"); }else if(i<0){ System.out.println("a<b"); }else{ System.out.println("a=b"); } } public int compareTo(Integer i) { // TODO Auto-generated method stub if(a<i) return -1; if(a>i) return 1; return 0; } }
------解决方案--------------------
我们方法是重写compareTo方法而已,很简单。
------解决方案--------------------
成就啊!---变态的问题解决了 一个> < ==都没有用到
判断的时候建议用下正则---为了速度我用了equals判断
public static void main(String[] args) {
compareTwoInt(23, -45);
}
public static void compareTwoInt(int a, int b){
int c = 0;
//此处最好采用正则表达来判断a b 的类型0 ,正,负;为了方便我就将就下了,-我也采用了equalsji
//建议用正则表达
if(String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){
System.out.println("a等于b");
}
if(!String.valueOf(a).equals("0")&&String.valueOf(b).equals("0")){
if(String.valueOf(a).contains("-")){