给定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; } };