1)位运算加法:
int a=3,b=4;
while(b!=0){
num=a^b;
carry=a&b<<;
a=num,b=carry;
}
最终a为结果
举个例子:
对于两数二进制相加,不进位相加相当于异或num,指考虑进位计算为与,并左移一位carry;当carry不为0时表示有进位,将进位的数carry不进位“加”到num中,得到新的num和carry;
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)乘法