怎样做有趣的视频网站,重庆造价工程新希望官网,中国万网是百度的吗,网站项目建设流程图目录
浮点数存储规则
单\双精度浮点数 存储 S、M、E 的布局
有效数字M 和 指数位E 的特殊规定
浮点数在内存中是否存储的S、M、E 浮点数存储规则
根据国际标准IEEE754#xff08;电气和电子工程协会#xff09;规定#xff1a;任意一个 浮点数F的二进制 都可以表示成…目录
浮点数存储规则
单\双精度浮点数 存储 S、M、E 的布局
有效数字M 和 指数位E 的特殊规定
浮点数在内存中是否存储的S、M、E 浮点数存储规则
根据国际标准IEEE754电气和电子工程协会规定任意一个 浮点数F的二进制 都可以表示成以下形式科学计数法 (-1)^S * M * 2^E 解析科学计数法
1.解析(-1)^S
(-1)^S 表示的是 浮点数F 的 符号位
当 S 0 时原式 (-1)^0 1此时的 1 就表示 浮点数F 为 正数
当 S 1 时原式 (-1)^1 -1此时的 -1 就表示 浮点数F 为 负数
2.解析M
M 表示 有效数字且 M 的取值范围是M 1 M 2
3.解析2^E
2^E 表示 指数位E 的取值为有效数字M 的 小数点 的 移动位数 举例说明浮点数5.5 如何表示成 科学计数法
1.十进制的浮点数5.5 如何转换为 二进制
整数部分的 5 转换为 二进制 为101 --- 1*2^2 0*2^1 1*2^0 4 0 1 5
小数部分的0.5 转换为 二进制 为 0.1 --- 1*2^(-1) 0.5
合并浮点数5.5 转换成 二进制 为101.1
2. 浮点数5.5 表示为 科学计数法
F 5.5 (-1)^0 * 1.011 * 2^2
其中S 0M 1.011E 2 单\双精度浮点数 存储 S、M、E 的布局
由以上结论可以得出只要有 S、M、E 这三个数时就能 还原浮点数F 所以 IEEE754规定在 内存中存储浮点数 时存储的是 S、M、E 这三个数 单精度浮点数存储 S、M、E 的布局
最高位存储的是 符号位S后面的 8个bit位 存储的是 指数位E剩下的 23个bit位 存储的是 有效数字M 单精度浮点数存储 S、M、E 的布局
最高位存储的是 符号位S后面的 11个bit位 存储的是 指数位E剩下的 52个bit位 存储的是 有效数字M 有效数字M 和 指数位E 的特殊规定
有效数字M 的特殊规定
M 的取值范围M 1 M 2
那么 M 的表示形式1.xxxxxxxx其中 xxxxxxxx 为小数部分
所以 IEEE754 规定省去 小数点前面 的 1在内存 中 只保存小数点后面 的 部分等到 读取 的时候再把 小数点前面 的 1 加上
举例说明M 1.011
那么在内存中只会存储 011只有等到 读取时加上 小数点前面的 1 指数位E 的特殊规定
IEEE754 规定指数位E 是一个 无符号整数unsigned int
但 指数位E 在实际情况下 会 有为 负数 的情况
如浮点数0.5 转换为 二进制为0.1
F 0.5 (-1)^0 * 1.0 * 2^(-1) 此时的 指数位E 就为 -1
所以为了规避这种情况
IEEE754 规定指数位E 存入内存时的真实值 必须再加上一个中间数
中间数值 的规定
对于 8个bit的E单精度浮点数中间数是127
对于 11个bit的E双精度浮点数中间数是1023 浮点数在内存中是否存储的S、M、E
创建 浮点数变量调试代码查看 浮点数 在内存 中 存储的模式即可
代码演示
float f 5.5f; 代码解析
浮点数默认为 double类型所以要在 5.5 后面加一个 f用来强调 5.5 是 float类型
浮点数f 表示为科学计数法
f 5.5 (-1)^0 * 1.011 * 2^2 S 0 M 1.011 --- M只存储小数点后的有效位011 E 2 --- E127 129float为单精度浮点类型 浮点数f 的 S、M、E 在内存中表示形式 S 0转换为二进制0 M 011 E 129转换为二进制1000 0001记住E是无符号整数所以最高位是有效位 转换为内存示意图如下
大小端存储的相关知识请见C语言 ——— 大/小端存储模式的介绍及判断-CSDN博客
那么 浮点数5.5 以 十六进制的形式 在 内存中 以 小端字节序存储 为00 00 B0 40
代码验证