该题使用的是位运算,而不是调用函数或者进行数字之间的比较。
总体思路:有个函数sign(),作用是取数字的符号位。还有一个函数flip()将0变成1,1变成0.获取a,b的差值的符号,根据符号打印a,b中较大的一个数。最后返回的a * sca + b * scb极为巧妙,堪称本题的精髓,可以仔细想想。
具体的代码如下:
// 反转1和0
int flip(int n) {
return n ^ 1;
}
// 取数字的符号位
int sign(int n) {
return flip((n >> 31) & 1);
}
int Max(int a, int b) {
int c = a - b;
int sca = sign(c); // C非负为1,负为0
int scb = flip(sca); // 和sca相反
return a * sca + b * scb;
}