void DecodeFloat( BYTE pByte[4] ) <br />{ <br /> printf( "原始(十进制):%d %d %d %d
" , (int)pByte[0], <br /> (int)pByte[1], (int)pByte[2], (int)pByte[3] ); <br /> printf( "翻转(十进制):%d %d %d %d
" , (int)pByte[3], <br /> (int)pByte[2], (int)pByte[1], (int)pByte[0] ); <br /> bitset <32> bitAll( *(ULONG*)pByte ); <br /> string strBinary = bitAll.to_string <char, char_traits <char> , allocator <char> > (); <br /> strBinary.insert( 9, " " ); <br /> strBinary.insert( 1, " " ); <br /> cout < < "二进制: " < < strBinary.c_str() < < endl; <br /> cout < < "符号: " < < ( bitAll[31] ? "- " : "+ " ) < < endl; <br /> bitset <32> bitTemp; <br /> bitTemp = bitAll; <br /> bitTemp < <= 1; <br /> LONG ulExponent = 0; <br /> for ( int i = 0; i < 8; i++ ) <br /> { <br /> ulExponent ¦= ( bitTemp[ 31 - i ] < < ( 7 - i ) ); <br /> } <br /> ulExponent -= 127; <br /> cout < < "指数(十进制): " < < ulExponent < < endl; <br /> bitTemp = bitAll; <br /> bitTemp < <= 9; <br /> float fMantissa = 1.0f; <br /> for ( int i = 0; i < 23; i++ ) <br /> { <br /> bool b = bitTemp[ 31 - i ]; <br /> fMantissa += ( (float)bitTemp[ 31 - i ] / (float)( 2 < < i ) ); <br /> } <br /> cout < < "尾数(十进制): " < < fMantissa < < endl; <br /> float fPow; <br /> if ( ulExponent > = 0 ) <br /> { <br /> fPow = (float)( 2 < < ( ulExponent - 1 ) ); <br /> } <br /> else <br /> { <br /> fPow = 1.0f / (float)( 2 < < ( -1 - ulExponent ) ); <br /> } <br /> cout < < "运算结果: " < < fMantissa * fPow < < endl; <br />} <br />
|