给定int a和intb,在不使用if-else等比较和判断运算符的情况下返回较大的那个数。若两数相同则返回任意一个。
测试样例:
1,2
返回:2
public int getMax(int a, int b) {
int c = (a-b)>>31;
return a+c*(a-b);
}
# -*- coding:utf-8 -*-
class Max:
def getMax(self, a, b):
# (a - b) >> 31 为 0, 说明 a - b 最高位为0,即a >=b
# (a - b) >> 31 为 -1, 说明 a - b 最高位为1, 即 a < b
return {0:a,-1:b}[(a-b)>>31]
再次****了。。。
public int getMax(int a, int b) {
// write code here
return a - b > 0 ? a : b;
}
使用Arrays类中的sort方法排序,第一个最小,最后一个最大。
import java.util.*;
public class Max {
public void getMax(int a, int b) {
// write code here
int[] c = { a, b };
Arrays.sort(c);
System.out.println(c[1]);
}
public static void main(String[] args) {
Max testMax = new Max();
testMax.getMax(1, 2);
}
}
class Max {
public:
int getMax(int a, int b) {
int c = a - b;
int r = ((c&0x80000000)>>31);
int ret = a;
r&&(ret=b);
return ret;
}
};
/*
思路:位运算 & >>
正数的符号位是0
负数的符号位是1
先用a-b得到c,如果c右移31位后和1相与得到1,说明C右移31位后最低位是1,也就是说右移之前的c是负数。那么a小于b。
否则a大于b。
*/
class Max {
public:
int getMax(int a, int b) {
//获取a-b的值
int c = a-b;
//差右移31位得到符号位
c >>= 31;
//符号位和1相与
c &= 1;
//如果此时c是1,说明是负数,下列式子:a = a-a+b = b(负数说a小于b)
//如果此时c是0,说明是正数,下列式子:a = a-0 = a(正数说明a大于b)
a = a - (a-b)*c;
return a;
}
};
public int getMax(int a ,int b){ b = a-b;//此时b>>31为1则b小于0即a<b,若b>>31为0 则a>b a- = b&(b>>31); //若a<b a=a-(a-b),若a>b a=a-0 return a; }public int[2] exchangeNum(int[2] num){ num[1] = num[0]-num[1]; num[0] = num[0]-num[1]; num[1] = num[0]+num[1]; return num; }