无判断max

题目描述

  请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。

输入描述

  给定两个int a和b

输出描述

  请返回较大的一个数,若两数相同则返回任意一个。

输入样例

12

输出样例

2 

分析

  int c = (a - b) >> 31;

  1) 当a >= b时,(a - b)符号位为0,(a - b)右移31位,高位补0,右移后的结果为0;  

  2) 当a < b时,(a - b)符号为-1,(a - b)右移31位,高位补0,右移后的结果为0;

  return a + c * (a - b)

  1) 当c = 0时,返回a;

  2) 当c = -1时,返回b;

测试代码

 1 #include <stdio.h>
 2 
 3 int main(void)
 4 {
 5     int a, b, c;
 6     scanf("%d%d", &a, &b);
 7     c = (a - b) >> 31;
 8     printf("%d\n", a + c * (a - b));
 9     return 0;
10 }

 

posted @ 2016-06-19 20:09  新生代黑马  阅读(156)  评论(0编辑  收藏  举报