//xk> 例题
【题目】不用if, ?: , switch等判断语句,找出两个给定变量中的最大值和最小值
【解答】要注意直接a + b可能导致溢出。
下面的解答来自《程序员面试宝典》第二版,很明显存在溢出问题。不过这种思路有点意思。
int max = (a + b + abs(a - b)) >> 1;
int min = (a + b - abs(a - b)) >> 1;
这个题纯粹是奇淫技巧,没多大意义。下面的解更好一些,不过异号运算时a - b也可能会溢出!
int max = a - (((a - b) >> 31) & (a - b));
int min = a + (((b - a) >> 31) & (b - a));
//xk> 例题
【题目】不用第3个变量,交换两个中存放的值。
【解答】这就是编程中常用的小技巧鸟。下面的解答形式优美好记,三个^=运算符中间交替填上两个变量名
a ^= b ^= a ^= b;