72 [面试题]如果不使用if-else和比较运算符,你知道如何求解2个数字中的较大一个吗?

【本文链接】

 http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html

【题目】

  不使用if-else和比较运算符,求解2个整数中的较大数。

【分析】

(1) 如果a>=b,那么返回a,否则返回b。

(2) 也就是说,如果a-b>=0,那么返回a,否则返回b。

(3)如果a-b>=0,让k=0,否则让k=1,返回a-k*(a-b)。

(4)从(3)中可以看出,如果让k等于a-b这个数字的符号位,那么刚好可以满足要求。

(5)让c=a-b,k等于c的符号位,返回a-k*c。

【代码】

 C++ Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
// 72_Max_of_2Numbers_without_ifelse.cpp : Defines the entry point for the console application.
//

/*
    version: 1.0
    author: hellogiser
    blog: http://www.cnblogs.com/hellogiser
    date: 2014/9/18
*/


#include "stdafx.h"
#include "iostream"
using namespace std;

int Max(int a, int b)
{
    
int c = a - b;
    
int k = (c >> 31) & 0x1;
    
int max = a - k * c;
    
return max;
}

int _tmain(int argc, _TCHAR *argv[])
{
    
return 0;
}

【本文链接】

 http://www.cnblogs.com/hellogiser/p/max-of-numbers-without-comparations.html