一提到两个变量的交换与比较,一般首先都会想到使用if、? :、switch等判断语句;但在面试的时候,经常会问到不使用判断语句的情况下,如何实现两个变量的交换和比较?
变量a、b找出其中比较大的一个:
方法一:
int max = ((a + b) + abs(a - b)) / 2
方法二:
int max(int a,int b)
{
int c = a - b;//c存储a、b差值
int temp = c >> 31;//计算差值的符号位
return a - c * temp;//如果a大,差值c大于0,temp为0,返回a;如果b大,c < 0,temp为1,返回a+c
}
上面的情况没有考虑溢出的情况,如果考虑溢出的情况可使用下面这个方法
方法三:
bool fun(int a,int b)
{
return a > b;
}
int max(int a,int b)
{
bool flag = fun(a,b);
return flag*a + (1-flag)*b;
}
交换变量a、b:
方法一:
a = a + b;
b = a - b;
a = a - b;
方法二:
a = a * b;
b = a / b;
a = a / b;
上面的情况没有考虑溢出的情况,如果考虑溢出的情况可使用下面这个方法
方法三:
a = a ^ b;
b = a ^ b;
a = a ^ b;