【发布时间】:2012-05-30 15:28:53
【问题描述】:
我编写了以下测试代码来检查定点算术和位移。
void main(){
float x = 2;
float y = 3;
float z = 1;
unsigned int * px = (unsigned int *) (& x);
unsigned int * py = (unsigned int *) (& y);
unsigned int * pz = (unsigned int *) (& z);
*px <<= 1;
*py <<= 1;
*pz <<= 1;
*pz =*px + *py;
*px >>= 1;
*py >>= 1;
*pz >>= 1;
printf("%f %f %f\n",x,y,z);
}
结果是 2.000000 3.000000 0.000000
为什么最后一个数字是 0?我期待看到一个 5.000000 我想使用某种定点算法来绕过在图像处理应用程序上使用浮点数。将浮点数组转换为整数的最佳/最简单/最有效的方法是什么?上面的“欺骗编译器”是一种强大的解决方法吗?有什么建议吗?
【问题讨论】:
-
当您将 *px 和 other 移动一位时,您只擦除了符号位,但没有擦除指数。有一个bit format of IEEE float
标签: c floating-point bit-shift fixed-point