位运算计算加减乘除

 

1)位运算加法:oop

int a=3,b=4;url

while(b!=0){spa

  num=a^b;.net

  carry=a&b<<;code

  a=num,b=carry;blog

}递归

最终a为结果get

举个例子:io

对于两数二进制相加,不进位相加至关于异或num,指考虑进位计算为与,并左移一位carry;当carry不为0时表示有进位,将进位的数carry不进位“加”到num中,获得新的num和carry;class

a = 0011, b = 1001;
start;

first loop;
1.1 sum = 1010
1.2 carry = 0010
1.3 carry != 0 , go on;

 

// 递归写法
int add(int num1, int num2){ if(num2 == 0) return num1; int sum = num1 ^ num2; int carry = (num1 & num2) << 1; return add(sum, carry); } // 迭代写法
int add(int num1, int num2){ int sum = num1 ^ num2; int carry = (num1 & num2) << 1; while(carry != 0){ int a = sum; int b = carry; sum = a ^ b; carry = (a & b) << 1; } return sum; }

 

2)减法运算:

经过加法器来实现减法器,即首先实现一个加法器,设为add(int a,int b);

而后对两个数num1,num2,num1-num2=num1+(-num2);对于一个数的负数在计算机中时取反再加1,即m_num2=add(~num2,1);而后add(num1,m_num2);

 

/* * num1: 减数 * num2: 被减数 */
int substract(int num1, int num2){ int subtractor = add(~num2, 1);// 先求减数的补码(取反加一)
    int result = add(num1, subtractor); // add()即上述加法运算  
    return result ; }

 

3)乘法

https://www.jianshu.com/p/7bba031b11e7

相关文章
相关标签/搜索