题目1:有X,Y两个数,不使用if、switch、:?等判断语句,找出两者之间的最大者。
解答:
方案一、int Max=((X+Y)+abs(X-Y))/2
这个方案有缺点,如果X和Y很大时,X+Y会越界。
方案二、int c=X-Y;
c=unsigned(c)>>(sizeof(int)*8-1);
如果c为1,X<Y;否则,X>Y。(不用比较,采用与、或处理)
题目2:不使用任何中间变量,交换变量a、b的值。
解答:
方案一、a=a+b;b=a-b;a=a-b;同样存在越界的隐患。
方案二、a=a^b;b=a^b;a=a^b;