不用+、-、×、÷数字运算符做加法

原文地址:http://zhedahht.blog.163.com/blog/static/254111742011125100605/

看到这个的题目第一个反应就是位运算,但是想不通怎么进行位运算,看了后面才知道,博主举了个例子就是5+17

不进位,算出5+17=12,如下图,就是小学生的运算,下面的1就是进位

这样最后12+十位的1就是22

同样,二进制也可以,5的二进制是101,17是10001,运算方法

    00101

+  10001

——————

    10100

+       10

——————

    10110

最后运算就是10110就是22了

从这里也可以看出来,二进制里面,1+1和0+0,原位为0,1+0原位为1,和异或很像吧

而进位呢,000110而言,都不会产生进位,只有11时,会向前产生一个进位,而进位相当于<<一位,这样就可以开始写程序了

复制代码
1 int AddWithoutArithmetic(int num1, int num2)
2 {
3 if(num2 == 0)
4 return num1;
5
6 int sum = num1 ^ num2;
7 int carry = (num1 & num2) << 1;
8
9 return AddWithoutArithmetic(sum, carry);
10 }
复制代码

posted @   linyilong  阅读(349)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 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 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示