//
// 將32位浮點數fval轉換為32位整數并存儲在ival中
// 小數部分將被裁剪掉
//
void TruncToInt32 (int &ival, float fval)
{
ival = *(int *)&fval;
// 提取尾數
// 注意實際的尾數前面還有一個被省略掉的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;
}
|