如果写一个max(a,b)怎么写?
java的话,一般是return a>=b?a:b;这种写法。
可是如果不让你使用if else或者三元操作符呢?
正确答案是(以一个函数形式给出):
public static int findMax(int a,int b){
b = a-b;
a-= b&(b>>31);
return a;
}
首先考虑两种情况
一、a>=b
这种情况下b=a-b得到的是0xxx...xxxx,也就是说最高位是一个0
那么b>>31就是一串0.
b&(b>>31)也是0。
所以a-=b&(b>>31)就是相当于a-0=0,返回了a。
二、a<b
这种情况下是1xxx....xxxx,最高位为1(负数最高位为1)。
那么b>>31就是一串1(这里>>是算术右移,所以左边补位是符号位)。
b&(一串1)==b
所以最终b&(b>>31)等于a-b。
此时a=a-(a-b)=b
所以返回了b。