位運算計算加減乘除

 

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

相關文章
相關標籤/搜索