免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2004-10-11 19:35 |只看该作者

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

A0110A写的程序对。真NB!佩服!收藏!绝对收藏!

是了,一般奇妙的运算都是出在位运算上。开始我也是想看位运算能不能解决。结果太过相信自己的逻辑分析了。

用一个z的取值实现判断,其实是一个hash的过程。其实还是判断,我推论的还是没错,没判断是不成的,只是判断在什么位置。但程序真的很NB。估计这个就是答案的程序了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
12 [报告]
发表于 2004-10-11 19:37 |只看该作者

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

原帖由 "紫云飞扬" 发表:
用printf将两个int数据打印出来。
然后你盯着屏幕很容易找出较大的那个的。


这个……人脑与电脑的有机结合,最强!

论坛徽章:
1
摩羯座
日期:2013-10-23 12:41:02
13 [报告]
发表于 2004-10-11 19:47 |只看该作者

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

的确赞同A0110A

论坛徽章:
1
摩羯座
日期:2013-10-23 12:41:02
14 [报告]
发表于 2004-10-11 20:12 |只看该作者

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

明白了,关键就是取符号

论坛徽章:
0
15 [报告]
发表于 2004-10-11 20:35 |只看该作者

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

厉害。

论坛徽章:
0
16 [报告]
发表于 2004-10-11 22:18 |只看该作者

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

厉害,果然牛人也,
能不能讲讲z = z >;>; 31;怎么理解?
unsigned int z,z是无符号数,z=x-y;右移31位后剩下什么呢?

论坛徽章:
0
17 [报告]
发表于 2004-10-11 22:35 |只看该作者

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

论坛徽章:
0
18 [报告]
发表于 2004-10-11 23:06 |只看该作者

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

我也有一个版本,可以直接算出来


  1. #include <stdio.h>;

  2. int
  3. main ()
  4. {
  5.         int x, y;

  6.         x = 0x4;
  7.         y = 0x4;
  8.         printf ("max of %d, %d is %d\n", x, y, new_max (x, y));
  9. }

  10. int
  11. new_max (int x, int y)
  12. {
  13.         int xy, yx;

  14.         xy = ((x - y) >;>; 31) & 1;
  15.         yx = ((y - x) >;>; 31) & 1;
  16.         return xy * y + yx * x + (1 - xy - yx) * x;
  17. }
复制代码

论坛徽章:
0
19 [报告]
发表于 2004-10-11 23:57 |只看该作者

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

A0110A的对么?一个很大的正数和一个很小的负数比较会得什么?
用8位来看吧:127-(-12=-1,由于高位是1,所以该函数返回-128!

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

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

FH 说得对, 减法也会溢出。我的版本有相同的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP