您的位置:首页 > 其它

不用判断性语句,实现求两个整数中较大数的函数

2011-04-12 20:44 253 查看
转自:http://hi.baidu.com/todaygoodhujun/blog/item/b1be40105c94ebfcc3ce79d8.html

不用判断性语句,实现求两个整数中较大数的函数

要求:

不能使用 if、for、while、?:() 或其他任何带有判断性质的语句。不能使用内部实现有判断语句的函数。

写一个函数,max(int a, int b)返回a、b中较大的一个。不能用( abs(a+b) + abs(a-b) ) * 0.5,据说abs函数中也 使用了 if 语句。

=========http://ike.126.com

/**//**************************************************

Purpuse : Evaluate the bigger one of two integers。

Author : ALNG

Date : 2003-03-11

Original : http://search.csdn.net/Expert/topic/1515/1515035.xml
**************************************************/

// 如果 i >= 0,返回0。否则返回1。在 max() 中被调用。

inline int signof(int i)

{

return unsigned(i) >> (sizeof (int) * 8 - 1);

}

// 返回两个整型参数中数值较大的参数的值。

int max(int a, int b)

{

int p[2];

p[0] = a;

p[1] = b;

return p[signof(a - b)];

}

=====

a & b 比较大小有三种情况

a > b (这种情况下 a-b>0)

a < b (这种情况下 a-b<0)

a = b (不用说了,再说就废话连篇了)

计算机编码中(int类型的)

>0 = 0XXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX

<0 = 1XXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX

这样就有一个特点,右移31bit就会出现 0,1

如果为 0 则 a 大

如果为 1 则 b 大

=========
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐