zoukankan      html  css  js  c++  java
  • C语言 float、double数据在内存中的存储方式

    float在内存中占4个字节(32bit),32bit=符号位(1bit)+指数位(8bit)+底数位(23bit)
    指数部分
    指数位占8bit,可以表示数值的范围是0-255(表示0~255一共256个数),因为指数可正可负,所以IEEE规定,此处算出的次方必须减去127才是真正的指数,
    所以float的指数范围是 -127(0-127) 到+128(255-127)。 底数部分 任何一个数的科学记数法都可以表示为1.xxx*2^n,小数部分就可以表示为xxx,整数部分永远是1,不影响精度,所以可以不用储存。23bit二进制可以表示的
    最大值是2^23=8388608,一共7位,这意味着最多能有7位有效数字(不能表示比8388608大的数值),但绝对能保证的为6位,即float的精度为6~7位有效数字。 以8.25为例: 8.25=1000.01 1000.01的科学记数法是1.00001*2^3 符号位,正数为0,负数为1 指数=3,即x-127=3,因此x=130,所以指数位应该是130,对应的二进制数是10,000,010 底数=00001,不足补0,所以23bit对应的二进制数是00,001,000,000,000,000,000,000 所以最终在内存中二进制数是 0 10,000,010 00,001,000,000,000,000,000,000 4个字节的值是 65 4 0 0

    说明:本人主机的字节序是大端字节序,所以顺序相反
    double存储方式和float相同,区别在于64bit=符号位(1bit)+指数位(11bit)+底数位(52bit)
    指数部分算出的次方必须减去1023才是真正的指数,
    double的小数部分可以表示的最大值是2^52=4,503,599,627,370,496,这意味着最多能有16位有效数字,但绝对能保证的为15位,即double的精度为15~16位有效数字。
  • 相关阅读:
    nyoj 230/poj 2513 彩色棒 并查集+字典树+欧拉回路
    nyoj 211 Cow Contest
    nyoj 203 三国志 dijkstra+01背包
    nyoj 170 网络的可靠性
    nyoj 120 校园网络
    nyoj 115 城市平乱 dijkstra最短路
    nyoj 42 一笔画问题 欧拉路径
    nyoj 38 布线问题
    hdu 2089 不要62--数位dp入门
    nyoj 712 探 寻 宝 藏--最小费用最大流
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6785875.html
Copyright © 2011-2022 走看看