免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: 发仔很忙
打印 上一主题 下一主题

[算法] 不用控制语句,不调函数,求两个数中的最大数 [复制链接]

论坛徽章:
5
狮子座
日期:2013-08-20 10:12:24午马
日期:2013-11-23 18:04:102015年辞旧岁徽章
日期:2015-03-03 16:54:152015亚冠之德黑兰石油
日期:2015-06-29 18:11:1115-16赛季CBA联赛之新疆
日期:2024-02-21 10:00:53
41 [报告]
发表于 2012-11-07 16:47 |只看该作者
回复 39# captivated


    这是64位的ABI,在32位系统要遭的

论坛徽章:
0
42 [报告]
发表于 2012-11-20 15:11 |只看该作者
cokeboL 发表于 2012-11-04 23:27

正数是对的 负数好像不对 要不再验证一下 负数的位运算可能是我错了

论坛徽章:
0
43 [报告]
发表于 2012-11-23 09:42 |只看该作者
int max(int a,int b)
{
  int r = (a>b);
  return r*a + (!r)*b;
}

这个说实话,很蛋疼......

不如直接 (a > b) ? a:b;...

论坛徽章:
0
44 [报告]
发表于 2012-11-25 19:33 |只看该作者
这个贴子有点味道。

type_t diff = a - b;
type_t sum = a + b;
type_t result = ( sum + adjust_sign_of diff ) / 2;
当 type_t 是定点数时,使用定点数的结构特征调整符号。以上许多技巧在于 int32_t 的符号位调整。
当 type_t 是浮点数时,则可以使用浮点数的结构特征调整符号。

不使用比较,只使用计算也可以实现选择。原理很简单,比较、选择等从本质上讲都是一种计算,所有的计算都可以归结于做加法。
或者从可计算性理论上说更具有一般性:任何可解的问题都可以转换成可数集问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP