计算机组成原理-运算方法之数据格式
数据格式
先说下数据格式,在选择计算机数的表示方式时,需要考虑以下几个因数:
- 要表达的书的类型(小数,整数,实数,复数)
- 可能遇到的数值范围
- 数值精度
- 数据存储和处理所需要的硬件代价
计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。
定点数的表示方式
所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。通常将数据表示成纯小数或纯整数。
用一个n+1
位数来表示一个定点数X
,其中一位Xn
用来表示数的符号,其余数代表他的量值。为了将整个n+1
位统一处理,符号位Xn
放在最左位置,并用数值0
和1
分别代表正号和负号,这样,对于任意定点数X = Xn Xn-1 …… X1 X0
,在定点机中可以表示位如下形式:
纯小数
如果数X
表示是纯小数,那么小数点位于Xn
和Xn-1
之间。当XnXn-1……X1X0
各位均为0
是,数X
的绝对值最小,即|X|min = 0
;当各位均为1
时,X
的绝对值最大,即|X|max = 1-2^-n
,故数的表达范围为
纯整数
如果数X
表示纯整数,那么小数点位于最低位X0
的右边,此时数X
的表示范围为:
浮点数的表示方式
浮点表示法:把一个数的有效数字和数的范围在计算机的一个存储单元中分别予以表示。这种把数的范围和精度分别表示的方法,相当于数的小数点位置随比例影子的不同而在一定范围内自由浮动。
eg:
9 X 10^-28 = 0.9 X 10^-29
因此任意一个十进制数N
可以写成:
同样的,在计算机中,任意一个二进制数N可以写成
其中,
M
成为浮点数的尾数
,是一个纯小数。e
是比例因子的指数,称为浮点数的指数
,是一个整数。比例因子的基数 2
对二进计数制的机器是一个常数。
在机器中表示一个浮点数时,一定要给出尾数,用定点小数形式表示。尾数部分给出有效数字的尾数,因而决定了浮点数的表示精度。二是要给出指数,用整数表示,常称为阶码,解码指明小数点在数据中的位置。浮点数也要有符号位。
早期表示:
后来为了方便软件移植,按IEEE754标准,32位浮点和64位浮点的标准格式位:
- 不论是32位浮点还是64位浮点,基数 2 是固定常数,每一个浮点数都一样,所以不用显示表示。
- 32位浮点数中,
S
是浮点数的符号位,占一位,在最高位,S = 0
表示正数,S = 1
表示负数 -
M
是尾数,放在低位部分,占用23位,小数点位置放在尾数域最高有效位的右边 -
E
是阶码,占用8位,阶符采用隐含方式,即采用移码的方式表示正负指数 - 浮点数的指数真值
e
变成阶码E
时,应将指数e
加上固定偏移值127(01111111),即E = e + 127
注意:浮点数的规格化表示,要求:为了提高数据的表示精度,当尾数的值不为0时,尾数域的最高有效位应为1.
因此,依照规格化后的要求,对于阶值E
和尾码M
有如下范围:
在IEEE745标准下,一个规格化的32位浮点数X
的真值表示为:
其中尾数域所表示的值是
1.M
。由于规格化的浮点数的尾数域最左位(最高有效位)总是1
,故这一位经常不予存储,而认为隐藏在小数点的左边。于是用23位字段可以存储24位有效数。
同样的,64位浮点数的区别在于,符号位1位,阶码域11位尾数域52位,指数偏移值1023,e = E - 1023
.
机器码
真值与机器码相对应,机器数是指:一个数在计算机中的二进制表示,叫做这个数的机器数。机器数的带符号的,在计算机用一个数的最高位存放符号,正数为0,负数为1.
而真值,是指没有符号位内容的值,也就是这个数本身的值(二进制形式).
对于一个数,计算机要使用一定的编码方式进行存储,原码,反码,补码是机器存储一个具体数字的编码方式。
原码
先说原码,原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表示值。比如8位二进制:
[+1]原 = 0000 0001 [-1]原 = 1000 0001
第一位是符号位,所以8位二进制的取值范围是:
[1111 1111 , 0111 1111]2 即 [-127 , 127]
反码
反码的表示方式是:
- 正数的反码是其本身
- 负数的反码是符号不变,其余位取反
[+1] = [0000 0001]原 = [0000 0001]反 [-1] = [1000 0001]原 = [1111 1110]反
补码
补码的表示方法是:
- 正数的补码就是其本身
- 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)
[+1] = [0000 0001]原 = [0000 0001]反 = [0000 0001]补 [-1] = [1000 0001]原 = [1111 1110]反 = [1111 1111]补
- Hadoop-2.7.4 集群快速搭建
- Scala-2.13.0 安装及配置
- HBase-1.3.1 集群搭建
- CentOs7.3 Hadoop 用户 ssh 免密登录
- 手把手教你用Mysql-Cluster-7.5搭建数据库集群
- 简单的java开源图床
- 调度器Quartz的简述与使用总结
- 使用 RecyclerView 实现 Gallery 画廊效果,并控制 Item 停留位置
- linux chmod,chown命令详解
- Quartz任务调度快速入门
- ElasticSearch 安装报错整理
- Docker Compose 1.16.1 安装
- 教你如何用 RecyclerView 做一个好用的轮播图
- Docker-17.06.2 环境搭建
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【Pytorch 】笔记十:剩下的一些内容(完结)
- 你知道怎么查看 IP 地址吗?
- spring cloud微服务之间的调用
- 华为网络整体解决方案 | 整体布局思想一定要有!
- java使用influxDB时序数据库
- 网络工程师必看 | 从动态图看VLAN技术,建议收藏!
- 【原创】Java并发编程系列35 | ScheduledThreadPoolExecutor定时器
- 『极限版』不掺水,用纯 CSS 来实现超飒的表单验证功能
- 从0到1开发测试平台(十三)前后端接口token验证
- 如何使用PYTHON抓取新闻文章
- Open3d 学习计划—13(Azure Kinect)
- 头条面试题:计算目录树的深度
- /etc/passwd文件和/etc/shadow文件
- docker_进阶
- [前端] 设定为disabled的表单域值不能被提交