位运算实现加法
来源:互联网 发布:linux apache ssl下载 编辑:程序博客网 时间:2024/06/04 17:50
a^b,即a+b,但是没有进位,原因:
- 0^1 = 1,0+1=1
- 1^0 = 1,1+0=1
- 1^1 = 0,1+1=10
- 0^0 = 0,0+0=0
a&b,得到的二进制数的每一位就是a+b需要进位的位,原因:
- 0&1 = 0,0+1=1
- 1&0 = 0,1+0=1
- 1&1 = 1,1+1=10
- 0&0 = 0,0+0=0
a<<1,将a的每一位都进位
那么思路来了:①先a^b得到没有进位的加法,②将需要进位的进位,③把前两个加起来;即:(a^b) + (a&b)<<1,当然啦,这里不能用“+”,不过我们可以用递归
package com.vapy.offer;/** * * @author vapy 2016年8月29日 * */public class Add { public static void main(String[] args) { System.out.println(add(23,-245)); } public static int add(int num1, int num2) { if(0 == num2) { return num1; } //<<的优先级比&高,切记不能少括号 return add(num1^num2, (num1&num2)<<1); }}
结果:-222
本文代码可在github查看:点击此处
4 0
- 位运算实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法
- 位运算实现加法
- 位运算 实现加法
- 位运算实现加法(转)
- 用位运算实现加法
- leetcode371 位运算实现加法
- 用位运算实现加法
- 利用位运算实现加法运算
- c++基本数据类型
- 排序算法(insert ,shell ,quick ,select , merge ,heap)
- 使用Spark core和SparkSQL的窗口函数分别实现分组取topN的操作
- AlexavoiceService error
- 避免在类别(category)中定义属性(@property)
- 位运算实现加法
- java中String 常用方法
- hive安装 (hive1.2.1+hadoop2.7+mysql)
- C# 输出目录结构树到Console或文本文件
- HDU 3555 Bomb(1-n含有“49”的数字个数)
- 仿IOS ActionSheet控件从下弹出Dialog
- Inspector视图使用脚本展开组件
- Scala学习小结(一)
- 华润基金oracle rac 10g迁移11g ORA-31693 ORA-31640:ORA-19505: