当前位置:主页 > 查看内容

聊一聊定点数和浮点数的存储方式

发布时间:2021-04-20 00:00| 位朋友查看

简介:本文转载自微信公众号「编程学习基地」,作者DeRoy 。转载本文请联系编程学习基地公众号。 定点数和浮点数 本文中所提到的都是基于intel x86Cpu,开发环境是基于windows 10 + vs2019。本片博客需要读者自己明白十进制、十六进制、二进制之间的转换,文中不会……

 

本文转载自微信公众号「编程学习基地」,作者DeRoy 。转载本文请联系编程学习基地公众号。 

定点数和浮点数

本文中所提到的都是基于intel x86Cpu,开发环境是基于windows 10 + vs2019。本片博客需要读者自己明白十进制、十六进制、二进制之间的转换,文中不会介绍转换过程,需要了解详细过程的情查找相关资料。

首先我们简单的介绍一下计算机中数据存储的基础知识,具体内容在大学课程《计算机组成原理》中有详细的介绍。计算机中对数据的存储是有两种形式,一种是以定点数方式存储即C/C++中的char、short、int、long、longlong,另一种就是以浮点数的方式存储即C/C++中的float、double。

定点数中char、short、int、long、longlong存储原理都是一样的,只是长度不同,所以我们选取int型详细介绍,浮点数中float、double原理也是一样的.

其中,定点数和浮点数都是最高位表示符号位(0表示正数1表示负数)其余位表示数值,字节是倒叙存数(小端模式)的也就是说高字节在左边低字节在右边。

定点数

定点数比较简单,计算机中存储的是真实值,计算机采用4字节(32位)存储int变量,例如:int value = 1 ; 则value转化成二进制0000 0000 0000 0000 0000 0000 0000 0001为了书写方便我们写成16进制形式为00 00 00 01。由于计算机是倒叙存储所以计算机中存储为01 00 00 00。

浮点数

下面介绍一下浮点数float存储,C/C++中float存储标准是基于IEEE754,具体内容是一个数值,可以使用科学计数法方式表示,即可以写成:

A * 2^n

其中A为尾数,2为底数,n为指数。

由于底数为2所以所有A都是大于1小于2,也就是都可以写成1.xxxx*2的n次方,所以计算机为了节省空间,可以不存储整数部分的1,因为所有的浮点数都有那个1我们转换的时候把那个1算进去就可以了。n可以是正数也可以是负数(float需要加上127,double加上1023)。

浮点数的存储是由符号位 (sign) + 指数位 (exponent) + 小数位 (fraction) 组成。

类型 符号位 指数 尾数
Float      1位(第31位) 8位(第23~30位) 23位(第0~22位)
Double   1位(第63位) 11位(第52~62位) 52位(第0~51位)

本文转载自网络,原文链接:https://mp.weixin.qq.com/s/wODXXTRNG_HP7omndN9eaQ
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文

  • 周排行
  • 月排行
  • 总排行

随机推荐