计算机组成原理-运算方法之数据格式

数据格式

先说下数据格式,在选择计算机数的表示方式时,需要考虑以下几个因数:

  1. 要表达的书的类型(小数,整数,实数,复数)
  2. 可能遇到的数值范围
  3. 数值精度
  4. 数据存储和处理所需要的硬件代价

计算机中常用的数据表示格式有两种,一是定点格式,二是浮点格式。

定点数的表示方式

所谓定点格式,即约定机器中所有数据的小数点位置是固定不变的。通常将数据表示成纯小数纯整数

用一个n+1位数来表示一个定点数X,其中一位Xn用来表示数的符号,其余数代表他的量值。为了将整个n+1位统一处理,符号位Xn放在最左位置,并用数值01分别代表正号和负号,这样,对于任意定点数X = Xn Xn-1 …… X1 X0,在定点机中可以表示位如下形式:

纯小数

如果数X表示是纯小数,那么小数点位于XnXn-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]补

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

P2264 情书(字符串hash90分)

题目背景 一封好的情书需要撰写人全身心的投入。lin_toto同学看上了可爱的卡速米想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他。...

342120
来自专栏专知

关关的刷题日记13——Leetcode 414. Third Maximum Number

关小刷刷题13 – Leetcode 414. Third Maximum Number 题目 Given a non-empty array of integ...

36690
来自专栏aCloudDeveloper

公司数据结构+算法面试100题

1.把二元查找树转变成排序的双向链表(树) 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。 ...

1.1K90
来自专栏欧阳大哥的轮子

常用的数学函数以及浮点数处理函数

在编程中我们总要进行一些数学运算以及数字处理,尤其是浮点数的运算和处理,这篇文章主要介绍C语言下的数学库。而其他语言中的数学库函数的定义以及最终实现也是通过对C...

22820
来自专栏数据结构与算法

P2264 情书

题目背景 一封好的情书需要撰写人全身心的投入。lin_toto同学看上了可爱的卡速米想对她表白,但却不知道自己写的情书是否能感动她,现在他带着情书请你来帮助他。...

35090
来自专栏C语言C++游戏编程

这是C语言无法修改得东西,C语言基础教程之常量解析

常量可以是任何基本数据类型,如整数常量,浮点常量,字符常量或字符串文字,还有枚举常量。

12610
来自专栏wym

HDU 6400 Parentheses Matrix(构造)

  每个位置只能是左括号或者右括号, “()”这算一个匹配,那么“(())”,“()()”也是匹配的。

9820
来自专栏云时之间

NLP入门之形式语言与自动机学习(三)

在前边的文章中我们把简单的需要的基础知识简单的列举了一遍,包括简单的集合逻辑,还有图论以及一些的证明方法等等,接下来我们将要开始我们正式的关于形式语言的学习,所...

43160
来自专栏趣谈编程

快速排序(基础版)

17130
来自专栏desperate633

[编程题] 制造回文分析代码

我们知道回文串的话,就是前后相等,那么一个字符至少出现两次,除了一种情况,就是可以有一个字符只出现一次,就是这个字符在中间。 所以,我们的思路就是统计出现奇数...

9520

扫码关注云+社区

领取腾讯云代金券