有趣的位运算(二)位运算实现加减乘除
用位运算实现加法运算,则可在加法运算的基础之上实现,其他三种运算:
int add(int x,int y) { int a,b; do { a=x&y;//判断是否需要进位,为1的比特位是需要进位的位 b=x^y;//计算加法 x=a<<1;//移位,相当于进位了。。 y=b; }while(a); return b; }
减法:
int sub(int x,int y) { //return add(x,negate(y)); return add(x,-y); }
乘法:
int mul(int x,int y)//没有考虑溢出的情况 { int m=1,t=0; if(x<0) { x=-x; } while(x>=m&&y) { if(x&m) t=add(y,t);//x*y=y+y*2^i1,+y*2^i2... m<<=1; y<<=1; } if((x^y)<0)//异号 return -t; return t
除法:
int divide(int x,int y) { x=(x<0?-x:x); y=(y<0?-y:y); int c=0; if(y!=0) { while(x>=y) { x=sub(x,y); c=add(c,1); } } else { cerr<<"000error\n"; exit(0); } if((x^y)<0) return -c; return c; }
本文来自这里
浙公网安备 33010602011771号