CrazyGo

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

有趣的位运算(二)位运算实现加减乘除

用位运算实现加法运算,则可在加法运算的基础之上实现,其他三种运算:

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;
}

本文来自这里

posted on 2013-07-02 10:03  CrazyGo  阅读(678)  评论(0)    收藏  举报