最新公告
  • 欢迎您光临欧资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入我们
  • C语言使用定点格式存储整数,使用浮点格式来存储

    c语言浮点数表示方法_c语言十六进制表示_c语言阶乘怎么表示

    1 前言

    我们在学习C语言的时候,通常认为浮点数和小数是等价的,并没有严格区分它们的概念,这并不影响我们的学习,因为浮点数和小数是绑定在一起的,只有小数以浮点格式存储。

    其实整数和小数都可以用定点格式存储,或者都可以用浮点格式存储,但实际情况是C语言用定点格式存储整数和浮点格式存储小数。追求“数值范围”和“数值精度”两个重要指标平衡的结果。

    2 什么是浮点数?

    浮点仅表示实数。浮点数在计算机中用于逼近任何实数。具体来说,这个实数是通过将整数或定点数(即尾数)乘以底数(在计算机中通常是 2) 的整数幂,类似于以 10 为底的科学记数法)定律获得的。

    3 浮点数在内存中的存储

    首先要明确的是,整型、浮点型或字符等数据类型都是以二进制形式存储在计算机底部的。

    浮点数在内存中的存储方式与整数不同c语言浮点数表示方法,因为整数可以转换为一对一的二进制数据。浮点数的存储由符号位(sign)+指数位(exponent)+小数位(fraction)组成。

    输入符号位指数尾数

    浮动

    第 1 位(第 31 号)

    8位(23~30位)

    23位(0~22位)

    位 1(位 63)

    11位(52~62位)

    52位(0~51位)

    int和float同样占用四个字节的内存,但是float所能表示的最大值要比int大很多。根本原因是浮点数以指数方式存储在内存中。

    浮点数转换为内存存储的步骤分为以下三个步骤:

    对于第3点:计算指数的时候需要加上偏移量(后面我们会介绍为什么要使用偏移量),而偏移量的值与浮点数的类型有关(偏移量的值float 为 127,double 的偏移值为 1023)。例如,对于指数 6,float 和 double 类型的偏移值为:

    4 个例子

    浮点数19.625如何存储在float中:

    5 个浮点和双精度范围和精度范围

    float 和 double 的范围由指数中的位数决定。 (因为表示是1.x * 2^Y的形式,所以忽略1.x的影响,直接用指数来表示浮点数的范围)

    1bit(符号位)8bits(指数位)23bits(尾数位)

    1bit(符号位)11bits(指数位)52bits(尾数位)

    所以c语言浮点数表示方法,float的指数范围是-127~+128,而double的指数范围是-1023~+1024,指数位以补码的形式除。

    负指数决定了浮点数可以表示的绝对值最小的非零数;而正指数则决定了浮点数所能表达的绝对值最大的数,即决定了浮点数的取值范围。

    float的范围是-2^128 ~ +2^128,即-3.40E+38 ~ +3.40E+38;

    double的范围是-2^1024 ~ +2^1024,即-1.79E+308 ~ +1.79E+308。

    准确度

    float 和 double 的精度由尾数的位数决定。尾数越多,可以表示的小数点后的有效数字越多,因此精度越高。浮点数按照科学记数法存储在内存中,整数部分总是隐含的“1”。由于它是不可变的,因此不会影响精度。

    float: 2^23 = 8388608,一共七位,也就是说最多可以有7位有效位,但是绝对保证6位,即float的精度为6~7位有效位;

    p>

    double:2^52 = 4503599627370496,共16位。同理,double 的精度为 15~16 位。

    6 解剖学:为什么要使用偏移量来计算指数?如果不使用偏移方法:

    8位二进制数表示的有符号数的范围有0000 0000~0111 1111和1000 0000~1111 1111两个范围,分别为0~+127和-127~0。

    你看这里的问题,有两个0,一个正0,一个负0。

    如果使用偏移方法:

    127转换成二进制是:0111 1111

    然后

    当我们要表示 128 时,则有 128+127 或 1000 0000 + 0111 1111 = 1111 1111

    从上面的例子中,我们可以得出规律。使用移位存储技术,我们可以用 8 位二进制来表示一共 127 个负数 + 零从 -127~+128(0)+ 128 个正数)一共 256 个数。使用移位存储似乎没有+0和-0的问题,并且可以充分利用新生成的8位二进制数最大程度地表示单精度浮点数的幂指数,即很合理。

    站内大部分资源收集于网络,若侵犯了您的合法权益,请联系我们删除!
    欧资源网 » C语言使用定点格式存储整数,使用浮点格式来存储

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    欧资源网
    一个高级程序员模板开发平台

    发表评论