我只是想知道在将场景转换为int后会发生什么,比如int(5666.1)?是否比父类的子类的static_cast更昂贵?由于int和double的表示形式从根本上不同,因此在此过程中会产生临时性并且也很昂贵.
任何具有本机浮点的CPU都将具有将浮点数转换为整数数据的指令.该操作可能需要几个周期到多个周期.通常,FP和整数都有单独的CPU寄存器,因此您必须随后将整数移动到整数寄存器,然后才能使用它.这可能是另一种操作,可能很昂贵.请参阅处理器手册.
PowerPC特别不包括将FP寄存器中的整数移动到整数寄存器的指令.必须有一个从FP到内存的存储,并加载到整数.因此,您可以说创建了一个临时变量.
在没有硬件FP支持的情况下,必须解码该号码.IEEE FP格式是:
sign | exponent + bias | mantissa
要转换,你必须做类似的事情
// Single-precision format values: int const mantissa_bits = 23; // 52 for double. int const exponent_bits = 8; // 11 for double. int const exponent_bias = 127; // 1023 for double. std::int32_t ieee; std::memcpy( & ieee, & float_value, sizeof (std::int32_t) ); std::int32_t mantissa = ieee & (1 << mantissa_bits)-1 | 1 << mantissa_bits; int exponent = ( ieee >> mantissa_bits & (1 << exponent_bits)-1 ) - ( exponent_bias + mantissa_bits ); if ( exponent <= -32 ) { mantissa = 0; } else if ( exponent < 0 ) { mantissa >>= - exponent; } else if ( exponent + mantissa_bits + 1 >= 32 ) { overflow(); } else { mantissa <<= exponent; } if ( ieee < 0 ) mantissa = - mantissa; return mantissa;
即,一些解包指令和一个班次.