IA64与浮点数的IEEE标准不符?

Jal*_*eri 1 c++ floating-point ieee

我试过这段代码来表示浮点数存储系统:

float *f = new float();
int *i = new int();
i = reinterpret_cast<int *>(f);
std::bitset<32> *bs;

std::cin>>*f;
bs = new std::bitset<32>(*i);
std::cout<<*bs<<" == "<<*f<<std::endl;
Run Code Online (Sandbox Code Playgroud)

但当它以23.5运行时,结果是01000001-10111100-00000000-00000000.权力是10000001=63.
由于IEEE标准,它不应该是64吗?
螳螂应该是00010111-10000000-00000000.真的吗?

注意:我用GCC和VS编译了这段代码.结果是一样的.

typ*_*232 8

01000001-10111100-00000000-00000000

0 10000011 01111000000000000000000

sign: 0
exponent: 10000011_binary = 131_decimal
mantissa: 01111000000000000000000_binary
mantissa is defined by 1.<mantissa>
so -> 1.01111_binary

exponent is defined this way: exp-127
-> 131-127 = 4
-> 1.01111_binary * 2^4
-> comma shift to the right by 4 
--> 10111.1_binary = 23.5_decimal
Run Code Online (Sandbox Code Playgroud)

通常:

(-1)^sign * 1.<mantissa> * 2^(exponent-127)
Run Code Online (Sandbox Code Playgroud)

  • 对于32位浮点数,这是IEEE 754 (3认同)