免费注册 查看新帖 |

Chinaunix

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

不用判断语句,求两个数的最大值  关闭 [复制链接]

论坛徽章:
0
41 [报告]
发表于 2004-10-12 15:33 |只看该作者

不用判断语句,求两个数的最大值

A0110A:C语言兼计算机专家;
JohnBull:数学家!


看了此贴,才知道高手的含义,才知道自己水平是何等地低

论坛徽章:
0
42 [报告]
发表于 2004-10-12 16:00 |只看该作者

不用判断语句,求两个数的最大值

无语,这么强!

论坛徽章:
0
43 [报告]
发表于 2004-10-12 17:14 |只看该作者

不用判断语句,求两个数的最大值

上来看看讨论这么热烈,我把没有缓冲溢出问题的代码贴出来,大家帮忙看看还有没有什么bug?

  1. 提升保存结果的方法如下:

  2. int
  3. max(int x,int y)
  4. {
  5. int buf[2]={x,y};
  6. unsigned long long z;

  7.         z=x-y;
  8.         z>;>;=63;

  9. return buf[z];
  10. }

  11. 不提升如下:
  12. int
  13. max(int x,int y)
  14. {
  15. int buf[2]={x,y};
  16. unsigned int z;
  17. int c;  
  18.         
  19.         z=x-y;
  20.         c=x-y;
  21.         z>;>;=31;
  22.         z= ((x-c-y)&&1)^z;
  23.       
  24. return buf[z];
  25. }


复制代码

论坛徽章:
0
44 [报告]
发表于 2004-10-12 17:28 |只看该作者

不用判断语句,求两个数的最大值

楼上的自己测过么?(x-c-y)不是0么?

论坛徽章:
0
45 [报告]
发表于 2004-10-12 17:56 |只看该作者

不用判断语句,求两个数的最大值

A0110A兄弟真NB, 佩服!!!

论坛徽章:
0
46 [报告]
发表于 2004-10-12 17:57 |只看该作者

不用判断语句,求两个数的最大值

我只是选择性地测了一下,在x-y溢出后就不会为0。

论坛徽章:
0
47 [报告]
发表于 2004-10-12 18:13 |只看该作者

不用判断语句,求两个数的最大值

高手!

都在这里!

论坛徽章:
0
48 [报告]
发表于 2004-10-12 18:15 |只看该作者

不用判断语句,求两个数的最大值

肯定要用位运算,

论坛徽章:
0
49 [报告]
发表于 2004-10-12 18:31 |只看该作者

不用判断语句,求两个数的最大值

z= ((x-c-y)&&1)^z;
估计是为了防此buf[]越界,直接改为
z=0^z;

论坛徽章:
0
50 [报告]
发表于 2004-10-12 19:22 |只看该作者

不用判断语句,求两个数的最大值

原帖由 "A0110A"]我只是选择性地测了一下,在x-y溢出后就不会为0。[/quote 发表:


这是不可能的。

[quote]原帖由 "A0110A" 发表:

  1. int
  2. max(int x,int y)
  3. {
  4. int buf[2]={x,y};
  5. unsigned int z;
  6. int c;
  7.       
  8.         z=x-y;
  9.         c=x-y;
  10.         z>;>;=31;
  11.         z= ((x-c-y)&&1)^z;
  12.       
  13. return buf[z];
  14. }
复制代码


x - c - y  =  x - y  -  c  =  c  -  c = 0


你不能假定次序,标准没有规定次序,次序由编译器决定
无论何种运算次序,结果都是 0。在 X86 上,无论你用 signed 还是 unsigned , cup 里进行的实际是 mod 2^32 的运算(环 Z/(2^32))。上述运算结果必定为0。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP