classSolution { publicintmaximum(int a, int b) { intk= (b - a) >>> 31; // 若 a 与 b 同号且 b 大于等于 a, 则 k = 0, 若 a 与 b 同号且 b 小于 a, 则 k = 1
// 处理 a 与 b 异号时的场景,因为 a 与 b 异号时 b - a 可能溢出,如 Integer.MAX_VALUE - Integer.MIN_VALUE = -1 intaSign= a >>> 31, bSign = b >>> 31; // 注意使用无符号右移,我们只需要最高的符号位 intsignDiff= aSign ^ bSign; // 同号则 signDiff 为 0, 异号则 signDiff 为 1 // 同号时 k 有效,此时保留 k, 异号时 k 是无效的,需要重新计算 k k = k & (signDiff ^ 1) | (bSign & signDiff); // bSign & signDiff 的作用是:当异号时,若 b 为负数,则使 k 为 1, 若 b 为正数,则使 k 为 0
return a * k + b * (k ^ 1); // 根据 k 的值决定保留 a 与 b 中的哪一个 } }