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位有效数字。
  • 相关阅读:
    Django rest_framework实现增删改查接口
    文件的三种打开方式知识点回顾
    Django中基表的创建、外键字段属性简介、脏数据概念、子序列化
    drf序列化与反序列化作业1
    rest_framework序列化与反序列化1
    APIview的请求生命周期源码分析
    sql
    正则上面的一个坑
    多线程与多进程---方法对比与使用
    网络编程----踩坑篇
  • 原文地址:https://www.cnblogs.com/zhanggaofeng/p/6785875.html
Copyright © 2011-2022 走看看