ival = *(int *)&fval;高手解释了,在线等!!!在线等!!!
// 将32位浮点数fval转换为32位整数并存储在ival中
// 小数部分将被裁剪掉
//
void TruncToInt32 (int &ival, float fval)
{
ival = *(int *)&fval; ----这一句,是取浮点数的地址,把浮点数地址转换成指向整型的指针,再取指针中的值。这样不也是强制转换,不和直接把浮点型用C的强制转换成整型是一样的吗?这个转换不就是用C的强制转换完成的吗?那这样怎么提高转换性能?请教了!!!!!!!!!!!!
// 提取尾数
// 注意实际的尾数前面还有一个被省略掉的1
int mantissa = (ival & 0x07fffff) | 0x800000;
// 提取指数
// 以23分界,指数大于23则左移,否则右移
// 由于指数用偏移表示,所以23+127=150
int exponent = 150 - ((ival >> 23) & 0xff);
if (exponent < 0)
ival = (mantissa << -exponent);
else
ival = (mantissa >> exponent);
// 如果小于0,则将结果取反
if ((*(int *)&fval) & 0x80000000)
ival = -ival;
}