不用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算了。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器