加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-14 03:44:40 所属栏目:大数据 来源:网络整理
导读:转自:http://hi.baidu.com/todaygoodhujun/blog/item/b1be40105c94ebfcc3ce79d8.html ? 不用判断性语句,实现求两个整数中较大数的函数 要求: 不能使用 if、for、while、?:() 或其他任何带有判断性质的语句。不能使用内部实现有判断语句的函数。 写一个函

转自: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 大

=========

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读