整数和实数,单精度和双精度
文章目录
- 一、数据类型
- 二、存储整数
- 2.1 无符号表示法
- 无符号整数溢出
- 2.2 符号加绝对值表示法
- 符号加绝对值表示法溢出
- 2.3 二进制补码表示法
- 反码
- 补码
- 二进制补码表示法溢出
- 2.4 三种表示法应用
- 三、存储实数
- 3.1 浮点表示法
- 3.2 规范化
- 3.3 符号 指数 尾数
- 3.4 余码系统
- 3.5 IEEE标准
- 3.6 规约数和非规约数
- 3.7 浮点数误差
- 精度
- 截断
- 四、存储文本
- 4.1 ASCII
- 4.2 Unicode
- 五、存储音频
- ①采样
- ②量化
- ③编码
- 六、存储图像
- 6.1. 光栅图
- 解析度
- 色彩深度
- 图像编码标准
- 6.2 矢量图
- 七、存储视频
一、数据类型
数据的表现类型多种多样,计算机行业中使用术语 “多媒体” 来定义包含数字、文本、音频、图像、视频的信息。
位(bit,binary digit的缩写)是存储在计算机中的最小单位,一个位能表示两种状态0或1。
所有计算机外部的数据类型的数据都要转化成0/1序列才能存入计算机中, 这种0/1序列称为位模式(有时也称为位流)。通常长度为8的位模式被称为1字节。有时用字这个术语指代更长的位模式。
二、存储整数
整数没有小数部分,但整数可以被当作小数点位置固定在最右边的数字。整数通常用定点表示法(因小数点总是固定在指定的某一位置,故名)存储。
为了更有效利用计算机内存,无符号和有符号的整数的存储方式是不同的。
2.1 无符号表示法
无符号表示法用于存储无符号整数。n位内存单元中所有的位都用来存储数据,存储范围为 0~2n-1。
- 存储无符号整数
- 首先将整数变成二进制数
- 如果二进制位数不足n位,则在二进制数的左边补0,使它的总位数为n位。如果位数大于n则溢出。
- 译解无符号整数
- 输出设备将内存中的二进制串转换为十进制的无符号整数。
无符号整数溢出
在n位存储单元中,可以存储的无符号整数范围为 0~2n-1。试图存储大于2n-1的数会导致溢出。
2.2 符号加绝对值表示法
符号加绝对值表示法将n位单元中最左位分配用于存储符号(0为正,1为负),可存储的数字范围是 -(2n-1-1) ~ +(2n-1-1)。 该系统中有两个0,+0和-0。
符号加绝对值表示法并不用于存储整数
符号加绝对值表示法溢出
有正负两种溢出情况
2.3 二进制补码表示法
几乎所有的计算机都采用 二进制补码 表示法存有符号整数。n位存储单元中无符号整数的范围(0 ~ 2n-1)被分为两个相等子范围,第一个用于存储非负整数 0~2n-1-1,第二个用于存储负整数 -2n-1~0。
二进制补码表示法最左位用于存储符号,0为正,1为负。二进制补码表示法中仅有一个0。
反码
简单反转各个位, 0 变为1,1变为0。
如果进行两次反码运算,就可以得到原先的整数。
补码
从右边复制位,直到有1被复制,接着反转其余的位(或者说:补码等于原码的反码加1)。
如果进行两次补码运算,就可以得到原先的整数。
- 以二进制补码格式存储整数
- 先将整数变成n位二进制数
- 如果是0和正整数,以原码存储;如果是负数,计算机取其补码存储
- 从二进制补码格式还原整数
- 如果最左位是1,计算机取其补码;如果最左位是0,不进行操作。
- 将二进制数转换为十进制。
二进制补码表示法溢出
2.4 三种表示法应用
- 无符号整数表示法
- 计数:计数时可以从1或0开始增长,不需要负数。
- 寻址:地址都是从0(存储器的第一个字节)开始到整个存储器的总字节数的正数。
- 存储其他数据类型:文本、图像、音频和视频都是以位模式存储的,可以翻译为无符号整数。
- 符号加绝对值表示法
- 它不用于存储整数,而用于存储部分实数。通常也用于采样模拟信号,如音频。
- 二进制补码表示法
- 二进制补码表示法是计算机中用于存储整数的标准表示法。
三、存储实数
实数是带有整数部分和小数部分的数字。
定点表示法小数点左边和或右边的位数是指定的,这不适合用来存储整数部分很大或小数部分很小的实数。 实数的存储通常采用浮点表示法。
当整数太大以至于无法作为整数存储时可能将整数作为小数部分为0的实数存储。
3.1 浮点表示法
浮点表示法允许小数点浮动,在小数点左右可以有不同数量的数码。在浮点表示法中,无论十进制还是二进制都是由三部分组成: 符号、位移量、定点数:
- 符号:正负号
- 位移量:小数点应该左右移动构成实际数字的位移量
- 定点数:小数点位置固定的定点表示法
科学计数法也是浮点表示法的应用。小数点左边固定一位数码,位移量为10的幂次。
3.2 规范化
为了使表示法的固定部分统一,科学计数法(用于十进制)和浮点表示法(用于二进制)都在小数点左边使用了唯一的非零数码,这称为规范化。十进制系统中的数码可能是1~9,而二进制系统中该数码是1。
十进制 → ±d.xxxxxx
注意:d是1 ~ 9,每个x是0 ~ 9
二进制 → ±1.yyyyyy
注意:每个y是0或1
3.3 符号 指数 尾数
在一个二进制数规范化之后,只存储三部分信息:符号、指数和尾数(小数点右边的位)。例如,+1000111.0101 规范化后变成为:
符号 指数 尾数
+ 26 x 1.0001110101
+ 6 0001110101
符号:用一个二进制位存储,0为正,1为负。
指数:2的幂,小数点左右移动位数,用余码表示法存储。
尾数:隐藏了小数点左边的1位,只存储右边的有效数字。以原码存储。
3.4 余码系统
指数是有符号的数,通常用余码系统存储。余码系统将一个偏置量N加到每一个指数中,使得每个指数都能以无符号整数存储。若用m个位存储指数,则 N = 2m-1–1。
余码表示法优点在于在余码系统中的所有整数都是正数,对这些整数进行比较或运算时不需要考虑符号。
3.5 IEEE标准
电器和电子工程师协会(IEEE)定义了几种存储浮点数的标准,最常用的是单精度(余127码,Excess_127)和双精度(余1023码,Excess_1023)。
3.6 规约数和非规约数
只讨论float类型。
IEEE 二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准。IEEE 754 标准从逻辑上采用一个三元组 { S,E,M } 来表示一个数。
S 是符号位,0为正,1为负。
E 是偏置指数,它等于原指数+偏置量,float的偏置量为127。
M 是有效数位,具有隐藏位1或0,M表示的实际值是1.M 或 0.M。
IEEE分别对 E=255(11111111)、E=0(00000000)、E=[254~1]作规定
- E=255:
- 当M位为0,结合符号有 +∞ 和 -∞
- 当M位不为0,表示 NaN。
- E=0:
- 当M位为0,结合符号有 +0 和 -0
- 当M位不为0,这是一个非规约数。规定这个数的指数为-126,M具有隐藏位0。
- 当 E=[254~1],这是一个规约数。M可为任意数,M具有隐藏位1。
综上所述,除去用来表示 ±0、NaN、±∞ 的特殊情况,float 表示的数分为规约数和非规约数。
- 规约数
- 指数 = E-127 ,1≤E≤254,-126 ≤ E-127 ≤ 127
- 尾数1.M,M为任意数,1.0 ≤ 1.M ≤ 2-2-23
- 真值 = (-1)S×(1.M)×2E-127
- 绝对值最小的规约数:1.0×2-126 = 2-126
- 绝对值最大的规约数:(2-2-23)×2127 = (1-2-24)×2128
- 两个相邻浮点数的距离为:2-23 × 2-126 = 2-149
- 最小规约数与0的距离:2-126
- 非规约数
- 指数 = -126。E = 0。
- 尾数0.M,M不为0,2-23 ≤ 0.M ≤ 1-2-23
- 真值 = (-1)S×(0.M)×2-126
- 绝对值最小的非规约数:2-23× 2-126 = 2-149
- 绝对值最大的非规约数:(1-2-23)×2-126 = 2-126 - 2-149
- 两个相邻浮点数的距离为:2-23 × 2-126 = 2-149
- 最小非规约数与0的距离:2-149
突然式下溢出(abrupt underflow):
如果没有采用非规约浮点数,那么0与绝对值最小的浮点数之间的距离(gap)将大于相邻的小浮点数之间的距离:2-126 ÷ 2-149 = 223,相差23倍
渐进式下溢出(gradual underflow):
采用非规约浮点数之后,0与绝对值最小的浮点数之间的距离和相邻的小浮点数之间的距离都为 2-149,非规约数填补了2-126到0之间的空白。
3.7 浮点数误差
精度
浮点数精度由尾数的位数决定。23位有效数字加上隐藏的1位共24位。
float:224=16777216,一共8位,float 精度为7
double: 253=4503599627370496,double 精度为15。
试图存储超出精度的值会产生溢出。
截断
二进制并不能精确表示十进制的所有数,在存储0.1时就会丢失精度:0.1的二进制是一个无限循环小数 0.0001100110011…。在计算机内存中不能完全表示,误差就这样产生了。
文章
四、存储文本
假设一种语言中全部符号的数量为N,表示该语言中某一符号的位模式的长度为 L≥[log2N] 。不同的位模式集合被设计用于表示文本符号。其中每一个集合称之为代码。表示符号的过程称为编码。
4.1 ASCII
美国国家标准协会(ANSI)开发了一个被称为美国信息交换标准码(ASCII)的代码。该代码使用7位表示每个符号。可以定义27=128种不同的符号。如今ASCII是 Unicode的一部分。
4.2 Unicode
硬件和软件制造商联合起来设计了一种名为 Unicode的代码,这种代码使用32位并能表示最大达232=4294967296个符号。代码的不同部分被分配用于表示来自世界上不同语言的符号。其中还有些部分被用于表示图形和特殊符号。
五、存储音频
文本可以数出文本中文字的数量,而音频是不可数的随时间变化的实体,只能在每一时刻度量声音的密度。
音频是模拟信号的例子。模拟信号可理解为随时间变化的连续信号。下图显示了一个模拟信号随时间变化的本质,如音频。
①采样
实际上无法记录模拟信号上所有的值,采样就是在模拟信号上选择数量有限的点来度量它们的值并记录下来。
采样率:
多少样本才能还原出原始信号的副本?样本数依赖于模拟信号中变化的最大数量。 如果信号是平滑的,则需要很少的样本,如果信号变化剧烈,则需要更多的样本。每秒40000个样本的采样率对重现音频信号来说足够好了。
②量化
量化指的是将样本的值截取为最接近的整数值的过程。例如,如果实际的值为17.2,就可截取为17;如果值为17.7,就可截取为18。
③编码
量化的样本值需要被编码成位模式。一些系统使用无符号整数来表示样本,一些使用有符号的整数来表示。但是,有符号的整数不必用二进制补码表示,它们可以是符号加绝对值表示的值。 最左边的位用于表示符号( 0表示正值, 1 表示负值), 其余的位用于表示绝对值。
每样本位:
每样本位也称为位深度,是指对于每个样本系统决定分配多少位来存储。过去仅有8位分配给声音样本,现在每样本16、24甚至32位都是正常的。
位率:
位深度为B,每秒样本数为S,每秒的音频存储S×B位。该乘积称为位率R。 如果使用每秒40000个样本以及每样本16位, 位率是R= 40000 ×16 = 640000 b/s = 640 KB/s。
声音编码标准:
当今音频编码的主流标准是MP3(MPEG Layer 3 的简写)。 该标准是用于视频压缩方法的MPEG(动态图像专家组)标准的一个修改版。它采用每秒44 100个样本以及每样本16位。 结果信号达到705600 b/s的位率,再用去掉那些人耳无法识别的信息的压缩方法进行压缩。 这是一种有损压缩法, 与无损压缩法相反。参见第15章。
六、存储图像
存储在计算机中的图像使用两种不同的技术:光栅图和矢量图
6.1. 光栅图
图片的数据密度(色彩)在空间上是连续的。这意味着数据需要采样。图片的采样通常被称作扫描。样本称为像素(代表图像元素)。
解析度
在图像扫描中,对于每英寸的方块或线条需要记录多少像素称为解析度。 如果解析度足够高,人眼不会看出在重现图像中的不连续。
色彩深度
用于表现像素的位的数量,称为色彩深度。眼睛对颜色的感知取决于如何对光线进行响应。眼睛有不同类型的感光细胞:一些响应红、 绿、 蓝三原色(也叫RGB),而另一些仅仅响应光的密度。
真彩色
用于像素编码的技术之一称为真彩色,它使用24位来编码一个像素,其中每个三原色( RGB) 都表示为8位。所以每种色彩都由 0 ~ 255之间的三维数字表示。
索引色
真彩色模式使用了超过1600万种颜色。 索引色(或调色板色)模式仅使用其中的一部分。 在该模式中,每个应用程序从大的色彩集中选择一些颜色(通常是256种)并对其建立索引。对选中的颜色赋一个0~255之间的值。
图像编码标准
几种用于图像编码的实际标准正在使用中。 JPEG(联合图像专家组)使用真彩色模式,但压缩图像来减少位的数量。GIF(图形交换格式)使用索引色模式。
6.2 矢量图
矢量图图像编码方法并不存储每个像素的位模式。一个图像被分解成几何图形的组合,例如, 线段、矩形或圆形。每个几何形状由数学公式表达。 例如,线段可以由它端点的坐标描述,圆可以由它的圆心坐标和半径长度来描述。矢量图是由定义如何绘制这些形状的一系列命令构成的。
当要显示或打印图像时,将图像的尺寸作为输入传给系统。系统重新设计图像的大小并用相同的公式画出图像。在这种情况下,每绘制一次图像, 公式将重新估算一次。因此,矢图也称为几何模型或面向对象图形。 例如,考虑半径为r的圆形。 程序绘制该圆需要的主要信息如下:
- 一个圆的半径r。
- 圆心的位置。
- 绘制的线型和颜色。
- 填充的类型和颜色。
当该圆的大小改变时,程序改变半径的值并重新计算这些信息以便再绘制一个圆。改变图像大小不会改变绘图的质量。
七、存储视频
视频是图像(称为帧) 在时间上的表示。一部电影就是一系列的帧一张接一张地播放而形成的。
整数和实数,单精度和双精度相关推荐
- 关于单精度和双精度实数
用科学计数法表示双精度实数: #include<stdio.h>int main() {double a=498465468.549;printf("%e",a); / ...
- 【STM32H7的DSP教程】第32章 STM32H7的实数FFT的逆变换(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第32章 STM32H7的实数FFT的逆变换(支 ...
- 【STM32F407的DSP教程】第31章 STM32F407实数浮点FFT(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 第31章 STM32F407实数浮点FFT(支持 ...
- 【STM32F429的DSP教程】第31章 STM32F429实数浮点FFT(支持单精度和双精度)
完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547 完整版教程下载地址:http://www.armbbs.cn ...
- 双精度数举例_c语言中,常量,变量,浮点,单精度,双精度是什么意思?举例...
展开全部 实型常量又称实数或浮点数.在C语言中可以用单精度型和双精度型两种形式表示实型常量,分别用e68a84323131333532363134313032313635333133343137656 ...
- Java单精度与双精度区别_java单精度和双精度的区别
为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽,而精 ...
- c++单精度和双精度的运算例子(计算机占位存储)
计算机中float, double类型数据分别占据4,8个字节,其中float类型和double可以表示的小数位数不同,导致了精度不同.double的精度更高. 计算机中数据的表示由:符号位, 指数位 ...
- 单精度和双精度的运算问题
学习目标: 单精度和双精度的运算问题 问题引出: 当我们在运行如下输出语句时 System.out.println(2.5-0.9); System.out.println(2.4-0.8);Syst ...
- 单精度 半精度 双精度_单精度与双精度
单精度 半精度 双精度 Here you will learn about Single Precision vs Double Precision. 在这里,您将了解单精度与双精度. When ta ...
- java中单精度_java单精度和双精度的区别
描述 为什么会有精度问题? 计算机处理数据都涉及到数据的转换和各种复杂运算,比如,不同单位换算,不同进制(如二进制十进制)换算等,很多除法运算不能除尽,比如10÷3=3.3333.......无穷无尽 ...
最新文章
- vue案例 - vue-awesome-swiper实现h5滑动翻页效果
- 关于Cloud各种组件的停更/升级/替换
- [云炬创业基础笔记]第六章商业模式测试20
- java写龟兔赛跑_简单的实现java多线程——龟兔赛跑
- flink state ttl
- 小爱音箱怎么装app_79元的Redmi小爱音箱怎么样?这里有一份体验报告
- LI标签在Ul中居中显示
- JOOQ事实:从JPA批注到JOOQ表映射
- 2020 年 3 月全国程序员工资排名!
- asp.net core 读取连接字符串
- 腾讯云总裁邱跃鹏:新基建最大的改变是从硬件到软件的转变
- 文献阅读:《Generative Adversarial Active Learning for Unsupervised Outlier Detection》-2020 trans
- 织梦dedecms蓝色培训机构模板教育学校学院整站php网站源码,织梦学校教育网 DEDECMS蓝色教育培训企业网站模板(成品整站源码)...
- C++解压KRC文件
- 高级终端termux下载不了Python_基于Termux打造Android手机渗透工具
- python图片,大家来找茬
- 清除访问网络共享文件夹密码
- C#winform连接数据库实现登陆注册(数据库的安装与配置)
- 使用zxing 解析图片中的二维码
- Spring Cloud的负载均衡Spring Cloud Ribbon和Spring Cloud Feign
热门文章
- PHP大道至简之农历换算
- 计算机cpu风扇不转怎么办,CPU风扇不转但是能开机,电脑风扇不转了怎么修理
- 认证失败: 不能认证到服务器: 被拒绝的 Basic 挑战
- 我的创作纪念日(2021.7.18 - 2022.7.18)
- 0202函数的求导法则-导数与微分-高等数学
- 计算机桌面任务栏过宽怎么处理,电脑任务栏变宽怎么还原
- Html页面生成excel,html页面导出为excel表格
- 测试-开发的恩怨情仇
- R 语言 | 公众号封面 Art using R
- Android 微信支付调不起