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

思路:
            如果有两个数,要么相等,要么不相等;如果两数不相等,
那它们就存在差值的关系(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算了。。。

相关文章:

  • 2021-07-15
  • 2022-12-23
  • 2021-09-02
  • 2022-03-04
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2021-05-24
  • 2022-12-23
  • 2022-02-07
  • 2021-07-11
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案