题目要求:
有两个变量a 和 b , 不使用 “if” ,"switch" , "? :" 或者其他判断语句 ,找出两个数中较大的。
方案一:
int max = ( a+b + abs(a-b) ) / 2 ; //abs是绝对值函数
解析:
如果a>b,那么a-b>0,所以表达式就变成了(a+b+a-b)/2=(a+a)/2=a。
如果a<b,那么a-b<0,取绝对值变成-(a-b),所以表达式变成了(a+b-a+b)/2=(b+b)/2=b。
方案二:
int c = a- b ;
c= unsigned (c) >>( sizeof(int)*8 - 1) ; // c的二进制最高位为1 则b大 , 为0则a大
解析:
从后面的移位可以看出, c是a-b的值 ,
若c<0 则c的符号位为1
若 c >0 则符号位 为0
这也是我在看书 的时候,觉得很经典的做法 , 记录下来。