不用加减乘除实现加法
2016-04-17 12:51
513 查看
思路:
不用加减乘除,那只能用位运算。
1.两个数a,b相加,二进制如果不考虑进位 0+0 得 0 ;1+0 得 1;1+1 得 0 =》 其实就是异或^ 得到 tmp1
2.考虑进位,只有 1+1 的位置上会导致前一位(左边)进位加1 =》
用按位与 & 选出 都是两个数为1的位置,然后左移1位 得到进位 tmp2
把1,2 的结果tmp1与tmp2相加就是所求, 但是不能直接相加,又要使用步骤1,2
循环:
int add(int a, int b)
{
int tmp1, tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
while (tmp2) {
tmp2 <<= 1;
a = tmp1;
b = tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
}
return tmp1;
}
递归:
int add(int a, int b)
{
int tmp1, tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
if(tmp2)
return add(tmp2<<1,tmp1);
else
return tmp1;
}
如求某数据n的9倍,n先左移3位再加n就可以了
不用加减乘除,那只能用位运算。
1.两个数a,b相加,二进制如果不考虑进位 0+0 得 0 ;1+0 得 1;1+1 得 0 =》 其实就是异或^ 得到 tmp1
2.考虑进位,只有 1+1 的位置上会导致前一位(左边)进位加1 =》
用按位与 & 选出 都是两个数为1的位置,然后左移1位 得到进位 tmp2
把1,2 的结果tmp1与tmp2相加就是所求, 但是不能直接相加,又要使用步骤1,2
循环:
int add(int a, int b)
{
int tmp1, tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
while (tmp2) {
tmp2 <<= 1;
a = tmp1;
b = tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
}
return tmp1;
}
递归:
int add(int a, int b)
{
int tmp1, tmp2;
tmp1 = a ^ b;
tmp2 = a & b;
if(tmp2)
return add(tmp2<<1,tmp1);
else
return tmp1;
}
如求某数据n的9倍,n先左移3位再加n就可以了
相关文章推荐
- 有关可变形部件模型(Deformable Part Model)的一些说明
- 基数排序之LSD
- IP访问伪造
- Git安装和多ssh key 管理
- 用初次训练的SVM+HOG分类器在负样本原图上检测HardExample
- 操作系统开发系列—12.a.从Loader到内核 ●
- Map容器——HashMap及常用API,及put,get方法解析,哈希码的产生和使用
- Android组件-下拉列表、时间选择器、日期选择器、单选框、复选框
- 在windows下运行Felzenszwalb的Deformable Part Model(DPM)源码voc-release3.1来训练自己的模型
- 如何选择合适的STL容器?
- 如何选择合适的STL容器?
- linux内核分析 第八周 理解进程调度时机跟踪分析进程调度与进程切换的过程
- 结构体里定义超过两个字符数
- 堆排序 | 数据结构与算法
- OpenCV中Mat类的图像如何设置ROI
- Kafka Broker常用配置详解
- 求指导。。。运行停止工作的原因。
- OpenCV2.4.4中调用SIFT特征检测器进行图像匹配
- python 单下划线/双下划线使用总结
- 数之和及平均值