C系列总结2 & 剖析整型、浮点型数据在内存中的存储
来源:互联网 发布:淘宝绿松石微信骗 编辑:程序博客网 时间:2024/06/08 15:28
前言:
不积跬步,无以至千里
整型、浮点型变量是C中经常使用到的基础类型,其中关于其在内存中的具体存储细节在编程书目中鲜有提及,在此做简单总结。
无参考书目
主要参考资料:
- 计蒜客-“数据科学导论”课程 https://www.jisuanke.com/course/619
以及
- Write by 张鹏霄, zpx736312737@126.com
概要:
- 计算机与二进制
- 由物理特性决定,数值型计算机能够表示0、1
- 将0、1有规则的放置于以容器中,称之为内存
- 内存的基本结构
- 内存的最小单位
- 内存的具体结构
- C/C++常见内置类型及其说明
- 整型(int)、浮点型(float)等
- 以int、float为例进一步解释
- 原码,反码,补码
- 符号位、指数位、尾数位
计算机与二进制-计算机离散数值存贮介质的基本结构
不用特殊的方法,人用双手只能从1数到10,但使用高低电平表示0、1的数字计算机在同样有限位数能够表达的数的范围可以多的多。
每一个用高低电平表示的0或1在计算中称作一个比特(bit),8个比特记为一个字节(byte)
可用以下表格描述2个字节
用二进制可以表示为0000 0001 0000 0001,用十六进制可以表示为0x0101
内存的基本结构
以字节为最小单位,计算机将内存进行编码(小区编门牌号),以char(字符)类型变量为例,我们可以得到
第一列表示内存的地址的编码(家庭住址),0x表示其为十六进制,第二列为值,根据ASCII码值得到01010011对应字符’S’。
以C的角度看内存,还将内存分为栈、堆等空间,因本文主要探讨整数、浮点数在内存中的存储,不在此赘述。
C/C++常见内置类型及其说明
一个字节(8bit)不考虑负数仅能表示0~255,我们约定一个int(整型)变量占用4byte,此时计算机能最大能表示2^32-1。
综上,我们约定常见内置类型如下
其中
- int 占有4byte,首位表示正负,其余位表示数值大小
- unsinged [int] 占有4byte,所有比特位表示数值大小
- char占有1byte,根据ASCII码值得到对应字符
- float占有4byte
- double占有8byte(win,c)
其中关于int与float有必要进一步说明
负数与浮点数的进一步说明
int-原码、反码、补码
为什么要有原、反、补码?
假设没有以上概念,做运算1+(1)容易,对应1byte下二进制有
结果为
但对1+(-1)
计算机很难去做运算。
经过研究,将原码(本来的二进制值)符号位不变,按位取反得到反码(以-1为例)
反码+1得到补码
作以上处理后计算机能更方便做计算
作简单总结有:
- 正数的补码与原码一样
- 负数的补码等于原码符号位不变按位取反后再+1,忽视溢出
float-浮点数的存储
浮点数在计算机中以符号位、指数位、尾数位三部分表示。
如浮点数3.5,二进制可以看作11.1,化为科学计数法:1.11*2^1;
在计算机中首先取一位置表示符号,其后一部分空间表示尾数(小数点后有效数字),最后一部分表示指数
对3.5用单精度浮点数(4byte)表示
对双精度浮点数(8byte),则有 符号位(1bit) 指数(11bit) 尾数(52bit)
综上,我们约定有国际标准IEEE,规定任意一个二进制浮点数以以下格式表示
其中
之后小数可以以上规则存在计算机中。
值得一提的是,1.5可以准确表示为二进制(1.1),但3.14不一定,2^-1=0.5,2^-2=0.25,可能多少个bit位都凑不齐3.14(但无限接近)
此时,双精度浮点数可以更接近最优解。
最后值得强调的是无符号整数E存在一些特殊情况
- 由于E是无符号整数,无法表示负数,则对任意数值加127再存储,如-1寸为126,1存为128
- E值为0,则表示小数无穷小,规定为0
- E全为1,表示小数无穷大
易得,0x00000009转换为浮点数为0
E全为0,我们认为值无限小,规定为0.
- C系列总结2 & 剖析整型、浮点型数据在内存中的存储
- 小结 | 整型和浮点型数据在内存中的存储
- 浮点型数据在内存中的存储
- 浮点型数据在内存中的存储
- 浮点型和整型在内存中的存储方式
- 整型、浮点型在内存中的存储方式
- 深剖整型与浮点型数据在内存中的存储
- 剖析浮点数在内存中的存储
- 整型和浮点型在内存中存储方式
- 使用程序获取整型数据和浮点型数据在内存中的表示---gyy整理
- 剖析整数,浮点数在内存中的存储
- 剖析整数,浮点数在内存中的存储
- 剖析整数,浮点数在内存中的存储
- 剖析整数、浮点数在内存中的存储
- 剖析整数,浮点数在内存中的存储
- 剖析各类型和整数、浮点数在内存中的存储
- C语言数据在内存中的存储
- C/C++浮点数在内存中的存储方式
- VS2015代码自动对齐快捷键
- 如何生成自己的库依赖
- Android MaskFilter: BlurMaskFilter、EmbossMaskFilter
- JedisConnectionException异常原因追踪
- thrift应用举例(c/c++作为服务端、java作为客户端)
- C系列总结2 & 剖析整型、浮点型数据在内存中的存储
- 1069. The Black Hole of Numbers (20)
- XCODE DEBUG 技巧
- Windows 下 Python + MySQL 的安装及操作方法
- java操作postgreSql遇到的问题
- JAVA设计模式之原型模式
- 重要题目
- 了解Node.js
- awk命令详解