zoukankan      html  css  js  c++  java
  • 加法的位运算实现

    Lintcode 1. A + B Problem

    Solution:

     1     int aplusb(int num1, int num2) {
     2 
     3         if(num2==0) return num1;//没有进位的时候完成运算     
     4     
     5         int sum,carry;     
     6     
     7         sum=num1^num2;//完成第一步没有进位的加法运算     
     8     
     9         carry=(num1&num2)<<1;//完成第二步进位并且左移运算     
    10     
    11         return aplusb(sum,carry);//进行递归,相加  
    12 
    13     }

    接下来来分析一下这个程序设计的思路:

    对于加法 : a + b 

    按照这个程序的思路可以把加法分为两个部分:

      第一个部分:不产生进位的时候的和

      第二个部分:一个可以用来表示这一次加法运算中所有进位的数

    根据上面的描述:

      第一部分:a^b

      第二部分:(a&b)<<1 

    注: 第二部分为什么要右移一位,例如一个两位二进制的数 01 & 01  , 是第一位(右边是低位)产生了进位,当时对第二位产生了影响,所以所得结果应为10

    然后不断重复这两个部分,当没有无进位发生的时候,纯粹的 a^b 即为 a+b

    参考连接:

     https://www.cnblogs.com/luowei010101/archive/2011/11/24/2261575.html

  • 相关阅读:
    php数组
    php数组排序
    php超级全局变量
    php循环
    php函数
    PHP魔术常量
    php面向对象
    static 关键字
    Final 关键字
    内置函数
  • 原文地址:https://www.cnblogs.com/virgildevil/p/11612996.html
Copyright © 2011-2022 走看看