//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;

本文介绍两种不用常规条件判断语句实现的编程技巧:一是利用位运算和绝对值函数找到两个整数的最大值和最小值;二是不使用第三个变量完成两个变量间的值交换。这些技巧虽非常用,但在特定场景下能展现独特的编程思维。
2850

被折叠的 条评论
为什么被折叠?



