免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2133 | 回复: 7
打印 上一主题 下一主题

高难问题,怎么会出这种问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-09-17 23:05 |只看该作者 |倒序浏览
请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句

[ 本帖最后由 1980116 于 2007-9-18 19:43 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-09-17 23:06 |只看该作者
这个贴子在2年前出现在,搜索一下,讨论得很激烈
偶提供的一个方法还是挺不错的,你可以去看一看

论坛徽章:
0
3 [报告]
发表于 2007-09-17 23:32 |只看该作者
原帖由 mik 于 2007-9-17 23:06 发表
这个贴子在2年前出现在,搜索一下,讨论得很激烈
偶提供的一个方法还是挺不错的,你可以去看一看

大哥,我找了没找到合理的解释,能在帮忙解答一下吗

论坛徽章:
0
4 [报告]
发表于 2007-09-17 23:34 |只看该作者
原帖由 1980116 于 2007-9-17 23:32 发表

大哥,我找了没找到合理的解释,能在帮忙解答一下吗


你要啥解释呀? 大哥

论坛徽章:
0
5 [报告]
发表于 2007-09-18 19:44 |只看该作者
(a-b&0x80000000)>>31;
这样可以吗

论坛徽章:
0
6 [报告]
发表于 2007-09-18 20:02 |只看该作者
原帖由 heavyrain44 于 2007-9-18 19:44 发表
(a-b&0x80000000)>>31;
这样可以吗


不错的办法,建议这样写:
31改为 8*sizeof(a-b)
0x8000000改为   (~((a-b)-(a-b))) >> (8*sizeof(a-b)) << (8*sizeof(a-b))

论坛徽章:
0
7 [报告]
发表于 2007-09-18 22:20 |只看该作者
原帖由 飞灰橙 于 2007-9-18 20:02 发表


不错的办法,建议这样写:
31改为 8*sizeof(a-b)
0x8000000改为   (~((a-b)-(a-b))) >> (8*sizeof(a-b))  


本来一眼看懂了,你一改,晕了…… -.-

论坛徽章:
0
8 [报告]
发表于 2007-09-18 22:30 |只看该作者
原帖由 barbas 于 2007-9-18 22:20 发表


本来一眼看懂了,你一改,晕了…… -.-


sry, 我写错了,8*sizeof(a-b),应该改为
31改为 (8*sizeof(a-b) - 1)

a,b最长的如果为long, 则值为31
如果最长的是short, 则值为15
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP