用位运算实现加法
来源:互联网 发布:手机淘宝哪儿有一元抢 编辑:程序博客网 时间:2024/05/29 03:46
用位运算实现加法
#include <iostream>using namespace std;int add(int m, int n) { if(n == 0) return m; int sum, carry; sum = m ^ n; // 不考虑进位时的加法 carry = (m & n) << 1; // 计算进位 return add(sum, carry);}int main() { cout << add(1,1) << endl; cout << add(1,2) << endl; cout << add(1,-1) << endl; return 0;}
简单说一下这里面的套路:
下面的0,1均为二进制表示,首先,先不考虑进位,
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (还有一个进位1,先不考虑进位)然后考虑进位,只有当两个1相遇时,才会产生进位
01 + 01 = 10
为此,可以使用&运算:01&01=01,再左移一位变为10,完成进位递归整个程序,多次递归后,如果n等于0,说明没有进位了,计算结束
程序的运行结果如下:
阅读全文
0 0
- 用位运算实现加法
- 用位运算实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 用位操作实现加法运算
- 用位运算实现加法和减法
- 位运算实现加法(转)
- 深层神经网络——激活函数去线性化
- gcc简介及编译过程
- win7 环境下 运用maven在Idea上 搭建spark
- 第四次作业 LBG矢量量化算法
- POJ2376 Cleaning Shifts (贪心)
- 用位运算实现加法
- Zookeeper、hadoop集群搭建详细过程
- 面向对象——object
- 使用内容提供者ContentProvider与内容访问者ContentResolver实现拿到另外一个项目的数据库数据
- (73)Map公共方法演示、Map集合获得键值对的两种方法:entrySet和keySet。Map中元素唯一性练习
- Git:冲突--error: Your local changes to the following files would be overwritten
- Intellij idea 2017后台任务
- [Leetcode] 3. Longest Substring Without Repeating Characters
- 面向对象——多态