题目描述

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

题目解析

首先看十进制是如何做的: 5+7=12,三步走

第一步:相加各位的值,不算进位,得到2。

第二步:计算进位值,得到10. 如果这一步的进位值为0,那么第一步得到的值就是最终结果。

第三步:重复上述两步,只是相加的值变成上述两步的得到的结果2和10,得到12。

同样我们可以用三步走的方式计算二进制值相加: 5-101,7-111

第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。

第二步:计算进位值,得到1010,相当于各位做与操作得到101,再向左移一位得到1010,(101&111)<<1。

第三步重复上述两步, 各位相加 010^1010=1000,进位值为100=(010&1010)<<1。

继续重复上述两步:1000^100 = 1100,进位值为0,跳出循环,1100为最终结果。

题目答案

public class Solution {
public int Add(int num1,int num2) {
while(num2!=0){
int tmp = num1^num2;
num2 = (num1&num2)<<1;
num1 = tmp;
}
return num1;
}
}

最新文章

  1. T-SQL学习记录
  2. iOS开发init方法解析
  3. Http 请求处理流程
  4. andriod手机签到应用服务器设计
  5. C++ vector和list的区别
  6. 开发设计模式(四) 代理模式(Proxy Pattern)
  7. Win 8.1 无法安装 .net framework3.5
  8. 1.centOS安装Mysql
  9. Java中的类型擦除与桥方法
  10. Mysql基本命令一
  11. golang 如何将imagemagick 和golang 打包到docker 环境中
  12. 架构师技能图谱 V1.2
  13. 使用autohotkey修改方向键、回车和启动程序
  14. 【Hbase学习之三】Hbase Java API
  15. python 使用json.dumps() 的indent 参数,获得漂亮的格式化字符串后输出
  16. iptables报错:Couldn&#39;t load target `accept&#39;:/lib64/iptables/libipt_accept.so: cannot open shared object file: No such file or directory
  17. 【383】defaultdict 相关用法
  18. OneAPM NI 基于旁路镜像数据的真实用户体验监控
  19. Python高级网络编程系列之第一篇
  20. JAVA读取MongoDB中的二进制图片并在jsp中显示

热门文章

  1. Java基础(九)
  2. Redis之分布式锁实现
  3. Vue点击改变属性(改变文字颜色)
  4. Spring-AOP之工作实践(二)
  5. Vue-websocket使用
  6. @bzoj - 1921@ [ctsc2010]珠宝商
  7. Keiichi Tsuchiya the Drift King (c++三角函数公式)【几何+三角函数公式】
  8. IP地址和端口
  9. python中的bytes和str类型
  10. Oracle调优之看懂Oracle执行计划