0

int を float に変換するにはどうすればよいですか (unsigned として返されますが、float として解釈されます)。ユニオン、ビット演算のみ、制御ロジック (if/while)、+ および - などの高レベル言語構造は使用できません。

4

2 に答える 2

5

もちろん。生のバイトバッファから浮動小数点数を確実に構築できます。単精度floatは、IEEE-754 では 32 ビット値として表され、整数空間を非常に簡単に表すことができます。IEEE 浮動小数点に関するウィキペディアのエントリでは、さまざまな形式について説明しています。設定またはテストするビットを特定するだけです。ビットの適切な説明については、単精度に関するウィキペディアのページを参照してください。ここから始めましょう:

float convert_int(unsigned int num) {
    float result;
    unsigned int sign_bit = (num & 0x80000000);
    unsigned int exponent = (num & 0x7F800000) >> 23;
    unsigned int mantissa = (num & /* insert mask value here */);

    /* you can take over from here */

    return result;
}

想像にお任せしますが、これは宿題のような気がします。私が書いた部分を理解すれば、あとは簡単にできるはずです。より優れた解決策は を使用することですが、これも演習として読者にunion任せます。

于 2012-09-10T01:52:44.067 に答える
-3

算術演算子またはビット演算子を使用したくない場合は、次のようなメソッドを使用できます。

 float convrt(int x)
 {
  return x;
 }

フロートを返します...メインで確認できます。

  void main()
 {
   int x=5;
   cout<<"size of x=" << sizeof(x);
   cout<<"size of convrt(x)=" << sizeof(convrt(x));
 }

次のように出力されます

    size of x=2
    size of convrt(x)=4

つまり、フロートに変換されます。:-)

于 2012-09-10T11:19:37.413 に答える