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