给定两个int a和b,不使用if-else等比较和判断运算符,请返回较大的一个数。若两数相同则返回任意一个

今天做面试题,第一次做到这种类型的题目

a>>31,对于有符号位的数,向右移动时,符号位也会向右移动,当为正数时,最高位补0,为负数时,最高位补1

int getMax(int a,int b){
    a = a-b;
    b -= a&(a>>31);
    return b;//返回值是b,说明了b大,返回值是a,说明了a大
}

猜你喜欢

转载自blog.csdn.net/Ally441/article/details/88068308