不用if、while、for、switch等语句及系统函数,实现求两数中的最大数的函数

      今天看到的这个题,觉得有意思,就做了一下。。。

思路:
            如果有两个数,要么相等,要么不相等;如果两数不相等,
那它们就存在差值的关系(1和5的差值是4,-2和3的差值是5)。
两数如果相减的话,那么就会得出它们的差值:

c=a-b

如果c为负数,那么a<b
如果c为正数,那么a>b
于是,现在就可以通过c的符号位来判断哪个数大了。
当然,要先取得c的符号位才行(1或者0),
用以下操作实现:

符号位=!((c&0x80000000)<<1==(c&0x80000000))

这个操作应该不难,有点C语言基础的都能看懂嘛~~就不细说了。

因为我现在要实现这么一个操作:

如果a<b,max=b;
如果a>b,max=a;

由于得到了符号位,就可以这样做:

如果是正数,那么max=a-0;
如果是负数,那么max就等于a减去这个负数,
这样就相当于把一个指向a的指针,移了|c|个单位,指向b。

所以,就要得到a的减数(0或它自身),最简单的实现方法就是:

减数=减数*符号位;

即,c=c*!((c&0x80000000)<<1==(c&0x80000000))

最后,a减去一个c,就能得到最大的数了。。。


函数代码部分(c++):

int GetMax(int a,int b)
{
 int c;
 int max;
 c=a-b;
    c=c*!((c&0x80000000)<<1==(c&0x80000000));
    max=a-c;
 return max;
}


8过有个缺点就是,该程序只能在32位机上可以正确运行,
因为c言语里面没有循环左移,所以取符号位的时候有点生硬,
虽然可以嵌入汇编,但既然是写算法就写纯c算了。。。

转载于:https://www.cnblogs.com/Random/archive/2007/04/15/714404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值