Bootstrap

用算术右移操作实现整型数的除法

一个带符号整型数x(二进制表示为w位),除以2^{k}, 0\leq k< w。整数除法总是舍入到0。结果与x算术右移k位的结果相等。不过,当x< 0时,x需要加偏置量2^{k}-1,然后算术右移k位,才能实现向0舍入。把x强制转换位浮点型,直接用除法得到结果比较,就是把小数部分舍掉了。

源程序

int divus(int x,int n);

void main()
{
    int x, y, k, rx, rxx, ry, ryy;
    float sx, sy;
    x=12340; y=-12340;
    k=4;
    rx=x/(2<<(k-1));    //rx=x/2^{k}
    rxx=divus(x,k);
    sx=(float)x/(2<<(k-1));
    ry=y/(2<<(k-1));  //ry=y/2^{k}
    ryy=divus(y,k);
    sy=(float)y/(2<<(k-1));    
}

int divus(int x,int n)   //将x右移n位
{
    int bias;
    if(x>=0) 
        return  x>>n;
    else 
        bias=2<<(n-1)-1;
      return (x+bias)>>n;
}
执行结果

rx=rxx=0x0303=771, sx=771.25;

ry=ryy=0xFCFD=-771, sy=-771.25。

;