使用位运算计算两个整数的加减
2015-09-10 12:41
260 查看
1、加法:
两个整数的加法可以转换成:两个整数各自2进制位的纯加法和s【不包括进位】,记录两个整数在哪一位上有进位的变量carry。然后结果就转化为了 s+carry。接着,再使用相同的方式,直到carry为0为止。此时,相当于被加数为0,和就是加数本身。
递归方式:
非递归方式:
两个整数的加法可以转换成:两个整数各自2进制位的纯加法和s【不包括进位】,记录两个整数在哪一位上有进位的变量carry。然后结果就转化为了 s+carry。接着,再使用相同的方式,直到carry为0为止。此时,相当于被加数为0,和就是加数本身。
递归方式:
// 使用位运算计算两个数的加法 int sum(int a, int b) { if (b == 0) return a; int s = a ^ b; int carry = (a & b) << 1; // 如果两个数对应的位都是1,说明该位有一个进位 // 此时的和即为 sum + carry return sum(s, carry); }
非递归方式:
int _sum(int a, int b) { int s = a ^ b; int carry = (a & b) << 1; // 如果两个数对应的位都是1,说明该位有一个进位 while (carry != 0) { a = s; b = carry; s = a ^ b; carry = (a & b) << 1; } return s; }
相关文章推荐
- 前端环境安装
- 深入理解C# 静态类与非静态类、静态成员的区别
- Hibernate笔记——缓存机制详细分析
- 第二届云鼎奖“中国最具潜力企业奖”花落安畅
- 黑马程序员_java05_反射
- ML 徒手系列 拉格朗日乘子法
- Golang 常用字符串处理方法汇总
- eclipse中查看storm0.9.3示例代码storm-start-05.docx
- MySQL 最基本的SQL语法/语句
- canvas基本用法
- 日志使用概要
- Objective-c-字典使用
- I2C读写时序
- NSFileHandle、NSFileManager、NSUserDefaults用法
- Android(java)学习笔记221:开发一个多界面的应用程序之不同界面间互相传递数据(短信助手案例)
- svn不小心ignore了怎么办
- C#实现Winform无边框移动的方法
- git生成ssh key
- 【unity插件】Tiled2Unity-非常方便的将Tiled导入到unity3d
- 通过ServiceLoader实现链式处理