我编写了以下测试代码来检查定点算术和位移。
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 我想使用某种定点算法来绕过在图像处理应用程序上使用浮点数。将浮点数组转换为整数的最佳/最简单/最有效的方法是什么?上面的“欺骗编译器”是一种强大的解决方法吗?有什么建议么?