使用位操作實現加減乘除運算
阿新 • • 發佈:2019-01-11
前言
在實際應用中一定要注意邊界問題,包括上邊界和下邊界
注意:
位操作中常用的公式
a=n&(n-1);//去掉n中最右邊的1;
b=n&(-n);//得到n中最右邊的1
-n==~n+1;
-n==~(n-1);
程式碼:
結果:/*在正式應用中一定要注意邊界問題,包括上邊界和下邊界*/ #include<iostream> #include<map> using namespace std; int add(int a, int b) { if (a==0) { return b; } int carry = (a&b)<<1; int adder = a^b; return add(carry, adder); } int substract(int a, int b) { return add(a, -b); } int mulit(int a, int b) { bool _ = (a > 0)^(b > 0); a = abs(a); b = abs(b); int ans=0; map<int, int> bitmap; for (size_t i = 0; i < 32; i++) { bitmap[1 << i] = i; } while (b>0) { int carry = bitmap[b&(-b)]; b = b ^ (b&(-b)); ans += a << carry; } return _ ? -ans : ans; } int divide(int a, int b) { bool _ = (a > 0)^(b > 0); a = abs(a); b = abs(b); int ans = 0; while (a >= b) { int m = 1; int nb = b; while ((nb<<1)<a) { nb <<= 1; m <<= 1; } ans += m; a -= nb; } return _ ? -ans : ans; } int main() { int a = -26; int b = 3; cout << "和:" << add(a, b) << endl; cout << "差:" << substract(a, b) << endl; cout << "積:" << mulit(a, b) << endl; cout << "商:" << divide(a, b) << endl; }