一个带符号整型数x(二进制表示为w位),除以
。整数除法总是舍入到0。结果与x算术右移k位的结果相等。不过,当
时,
需要加偏置量
,然后算术右移k位,才能实现向0舍入。把
强制转换位浮点型,直接用除法得到结果比较,就是把小数部分舍掉了。
源程序
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)); //
rxx=divus(x,k);
sx=(float)x/(2<<(k-1));
ry=y/(2<<(k-1)); //
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。