免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
21 [报告]
发表于 2012-11-05 15:03 |只看该作者
int max(int a, int b) {
    return ((int[]){a, b})[((a-b)>>31) & 0x01];
}

论坛徽章:
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
22 [报告]
发表于 2012-11-05 15:08 |只看该作者
回复 20# fengyun530


    因为这个语法是C99特有的,你得用支持C99的编译器(比如gcc,clang)编~~既然是玩嘛,就玩最新的,嘿嘿。VC是不支持C99的。

如果编不过,尝试:
  1. int max(int a, int b) {
  2.     return ((a+b+~(~0u>>1))>>31)[&a];
  3. }
复制代码

论坛徽章:
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
23 [报告]
发表于 2012-11-05 15:13 |只看该作者
或者,这样:
  1. int (*max)(int,int) = (int(*)())"\x8B\x44\x24\x04\x8B\x54\x24\x08\x39\xC2\x0F\x4D\xC2\xC3";
复制代码

论坛徽章:
0
24 [报告]
发表于 2012-11-05 15:22 |只看该作者
本帖最后由 netcos 于 2012-11-05 15:23 编辑


    这样也可以
  1. int max(int a, int b) {
  2.     return *(&a + (((a-b)>>31) & 0x01));
  3. }
复制代码

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
25 [报告]
发表于 2012-11-05 15:28 |只看该作者
本帖最后由 lin5161678 于 2012-11-05 15:32 编辑

回复 23# starwing83

求讲解 求科普
类型转换 指针指向哪些忽略 都懂
字符串的内容是什么
汇编吗
/////////////////////////////////////////////////
对了 前辈 有一点你忽略了
赋值符号右边的数据类型
int(*)(int, int)才对

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
26 [报告]
发表于 2012-11-05 15:30 |只看该作者
回复 24# netcos


有一点不理解
既然 >>31 已经写死了
为什么不干脆就
(a-b)&0x80000000
至少 ()可以少写几个

论坛徽章:
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
27 [报告]
发表于 2012-11-05 15:40 |只看该作者
回复 25# lin5161678


    对C来说,函数括号里面啥都不写,代表可以接受任意参数,这两个类型是兼容的。

至于写移位,单纯想少写点代码而已~

论坛徽章:
1
摩羯座
日期:2013-12-19 10:04:07
28 [报告]
发表于 2012-11-05 15:46 |只看该作者
回复 27# starwing83

哦哦 类型兼容 嗯
不过这个不是重点
我比较想了解 字符串里面是数据是什么 怎么做到返回两个数的最大值这个作用的
前辈指点一下
   

论坛徽章:
0
29 [报告]
发表于 2012-11-05 23:10 |只看该作者
等待中,求指引。。

论坛徽章:
0
30 [报告]
发表于 2012-11-05 23:10 |只看该作者
return a>b?a:b;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP