利用位运算做加法

来源:互联网 发布:淘宝pc端是什么意思啊 编辑:程序博客网 时间:2024/05/16 00:25

一直没有注意位运算的使用,无意中看到利用位运算做加法,感觉比较有意思,就学习了下,感觉还挺有趣。现在简单介绍一下,防止以后遗忘。
假设我们要计算1+2的和,其中1的二进制表示为01,2的二进制为10。二进制的加法主要分为三步:

  1. 对1和2的二进制进行异或(相等为0,不相等为1,即0^0=0,0^1=1)得11。
  2. 对1和2的二进制进行位与(都为1时才为1,即1&1=1,1&0=0)得00,然后向左移动一位。
  3. 对1、2步的结果相加,然后重复1、2步,直到不产生进位为止。
    下面用一段代码演示:
#include <iostream>using namespace std ;int addFun(int num1 , int num2) ;int main(){    cout<<addFun(1 , 2) ;    system("pause") ;    return 1 ;}int addFun(int num1 , int num2){    int sum , carry ;    do     {        sum = num1 ^ num2 ;        carry = (num1 & num2) << 1 ;         num1 = sum ;        num2 = carry ;    } while (num2 != 0);    return sum ;}
0 0
原创粉丝点击