4.8 取两数的最 大/小 值
原理
- 如果 a >= b,则 a - b >= 0 且
(a - b) < 0,所以 ((a - b) » 31) = 0 且 ((a - b) » 31) = -1。 - 如果 a < b,则 a - b < 0 且
(a - b) >= 0,所以 ((a - b) » 31) = -1 且 ((a - b) » 31) = 0。
实现
int max(int a, int b){
return (b & ((a - b) >> 31)) | (a & (~(a - b) >> 31));
}
int min(int a, int b){
return (a & ((a - b) >> 31)) | (b & (~(a - b) >> 31));
}