C/C++ 中 float & double 类型数据在内存中的存储形式

IEEE 规定

IEEE 规定 float & double 类型的数据用三元组 {S, E, M} 表示,”S” 用 0 和 1 分别表示正数和负数,尾数 “M” 用原码表示,阶码 “E” 用移码表示,还规定尾数域的最高有效位总是 1,并且最高位不予存储(都是 1 也就不用浪费存储空间了)

float 类型

单精度浮点数 float(32bit) 表示为:

SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM

所以 32bit 的单精度浮点数可表示为:

\[float = (-1)^{S} * (1.M) * 2^{(E - 127)}\]

double 类型

双精度浮点数 double(64bit) 表示为:

SEEE EEEE EEEE MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM MMMM

所以 64bit 的双精度浮点数可表示为:

\[double = (-1)^{S} * (1.M) * 2^{(E - 1023)}\]

注意

Table of Contents