1、数制与编码
进位计数制及其相互转换
进位计数法
是一种计数法,常用的进位计数法有十进制数
、二进制数
、十六进制数
、八进制数
在进位计数法中,每个数位所用到的不同数码的个数称为基数
一个进位数的数值大小(十进制表示)
就是它的各位数码按权(位权)相加
整数位最低位规定为第0位
,小数位最高位为第-1位
- 1、在二进制转化为八进制和十六进制的时候,将二进制数进行相应的
补齐操作
后,然后分别用对应的八进制或十六进制数取代 - 2、八进制和十六进制数之间进行转换的时候,需要使用二进制数作为桥梁
- 3、十进制数转化为任意进制数,常采用基数乘除法。对于整数部分用
除基取余法(商为0时结束)
,对于小数部分用乘基取整法(积为0或满足精度要求时结束)
,最后将整数部分与小数部分的转换结果拼接起来
在计算机中,小数和整数不一样,整数可以连续的表示
,但小数是离散的
。所以不是每一个十进制小数都可以准确地用二进制表示,但任意一个二进制小数都可以用十进制小数表示
真值和机器数
带正负符号的数称为真值
。真值是机器数所代表的实际值
在计算机中,通常采用数的符号和数值一起编码的方法来表示数据,这种把符号数字化的数
称为机器数
BCD码
二进制编码的十进制数(Binary-Coded Decimal,BCD)
通常采用4位二进制数来表示一位十进制数
常用的BCD码有8421码
、余3码
、2421码
如果两个8421码相加之和
小于或等于
,则不需要修正;如果相加之和大于或等于
,则需要加6修正
,并向高位进位。进位可以在首次相加或修正时产生
字符与字符串
由于计算机内部只能识别和处理二进制代码
,所有字符都必须按照一定的规则用一组二进制编码来表示
ASCII
码采用7位二进制数
来进行编码
0到9的ASCII码
值为
,即去掉高3位,只保留低4位,则正好是二进制形式的0到9
在1981年的国家标准GB 2312-80
中,每个编码用两个字节
表示
汉字的编码包括汉字的输入编码
、汉字内码
、汉字字形码
三种,它们是计算机用于输入
、内部处理
和输出
三种用途的编码
区位码
和国标码
都是输入码,注意这两者与汉字内码
之间的关系
字符串占用主存中连续的多个字节
,每个字节存储一个字符。一般来说存储字长
都为字节的整数幂次方倍,按字符串中字符在一个主存字
中存储的先后顺序,可以分为大端
和小端
两种存储模式
校验码
校验码(检错纠错编码)
是指能够发现或能够自动纠正错误的数据编码。
校验码的原理是通过增加一些冗余码
,来检验或纠错编码的
通常某种编码都是由许多码字构成的,任意两个合法码字之间最少变化的二进制位数,称为数据校验码的码距
对于码距不小于2
的数据校验码,开始具有检错的能力
。码距越大,检错和纠错能力就越强,而且检错能力总是大于或等于纠错能力的
奇偶校验吗
奇偶校验码的码距为2
,可以检测出奇数位错误
,但不能确定出错的位置,也不能够检测出偶数位错误,增加的冗余位称为奇偶校验位
校验位的取值将使整个校验码中1的个数
为奇数或偶数而形成的校验码分为奇校验码
或偶校验码
奇偶校验码不能纠正错误
,常用于对存储器数据的检查或者传输数据的检查
海明校验码
海明校验码实际上是一种多重奇偶校验码
,其实现原理是在有效信息位中加入几个校验位
形成海明码,并把海明码的每一个二进制位分配到几个奇偶校验组
中。当某一位出错后,就会引起有关的几个校验位的值
发生变化
海明校验码可以发现错位
,还可以指出错位的位置
,为自动纠错提供了依据
海明校验码相关的计算题的计算步骤:确定海明码的位数
、确定校验位的分布
、分组以形成校验关系
、校验位取值
、海明码的校验原理
p29
循环冗余校验(CRC)码
CRC
的基本思想是:在K位信息码后再拼接R位的校验码,整个编码的长度为N位,其基于线性编码理论
生成多项式
是接收端
和发送端
的一个约定
任意一个二进制数码
都可以用一个系数仅为0或1的多项式
与其对应。生成多项式
的最高幂次为
,则转换成对应的二进制数有
位
相关计算题的计算步骤见p30
2、定点数的表示与运算
定点数的表示
在计算机中参与运算的机器数有两大类:无符号数
和有符号数
通常约定二进制的最高位为符号位
,用0表示正号,用1表示负号
有符号数的机器数
表示由原码
、补码
、反码
和移码
,注意各种编码的记法
根据小数点的位置是否固定,在计算机中有两种数据格式:定点数
和浮点数
对于定点数,在计算机中通常采用两种简单的约定:将小数点的位置固定在数据的最高位之前,或者是固定在最低位之后。前者称为定点小数(纯小数)
,后者称为定点整数(纯整数)
定点小数由符号位
和尾数部分
组成,小数点是隐含约定的
以下每种机器数的表示方式
都对应有纯小数和纯整数两种情况
原码(我们通常默认的是原码)
用机器数的最高位表示数的符号,其余的各位表示数的绝对值
真值零的原码表示
有正零和负零两种形式
补码
原码表示法的加减法操作比较复杂
,而补码表示法中的加减法则统一采用加法操作实现
真值零的补码表示
是唯一的
对于小数,补码比原码多表示一个-1
;对于整数,补码比原码多表示一个
原码和补码之间的转换
:对于正数,补码和原码的表示是相同的;对于负数,符号位不变,数值部分按位取反,末位加1(取反加1)
补码的算术移位
(很重要)
变形补码(模4补码)
被用在完成算术运算的ALU部件中
反码表示法
反码通常用来作为由原码求补码(反之也可)的中间过渡
真值零的反码表示
不唯一
移码
移码常用来表示浮点数的阶码
,它只能表示整数
移码中零的表示唯一
一个真值的移码和补码仅差一个符号位
移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小
定点数的运算
定点数的移位运算
对有符号数
的移位称为算术移位
;逻辑移位
的操作对象是逻辑代码,可以视为无符号数
算术移位的对象是带符号数
,在移位的过程中符号位保持不变
正负性 | 码制 | 添补代码 |
---|---|---|
正数 | 原、补、反 | 0 |
负数 | 原码 | 0 |
负数 | 补码 | 左移添0,右移添1 |
负数 | 反码 | 1 |
逻辑移位将操作数当做无符号数
看待,不论左移还是右移,都是添0
循环移位
原码定点数的加/减法运算
运算规则没有什么特别的地方
运算时注意机器字长,当左边位出现溢出时,将溢出位丢掉
补码定点数加/减法运算
补码加减运算规则简单
,易于实现,因此计算机系统中普遍采用补码加减运算
mod M
运算是为了将溢出位丢掉
符号扩展
在计算机算术运算中,有时必须将采用给定位数表示的数转换成具有不同位数的某种表示方式,这就成为符号扩展
正数的符号扩展
(对于各种机器数表示方法都可行):很简单,除了符号位之外都用0填充
原码表示的负数
的扩展,符号位移到新的位置上之后,都用0
填充;补码表示的负数
的扩展,符号位移动到新的位置上之后,所有附加位都用1(对于整数)
或0(对于小数)
进行填充;反码表示的负数
的扩展,符号位移到新的位置上之后,都用1
填充
溢出概念和判别方法
溢出
是指运算结果超出了数的表示范围。通常,大于机器所能表示的最大正数为上溢
,小于机器所能表示的最小负数为下溢
定点数加减运算出现溢出时,运算结果是错误的
补码定点数加/减运算
溢出判断的方法有3种:采用一位符号位
、采用双符号位
、采用一位符号位根据数据位的进位情况判断溢出
定点数的乘法运算(如果是要求直接结果,可以直接使用常用的方法来计算)
在计算机中,乘法运算由累加
和右移
操作实现
根据机器数的不同,可分为原码一位乘法
和补码一位乘法
。原码一位乘法的规则比补码一位乘法简单
定点数的除法运算(如果是要求直接结果,可以直接使用常用的方法来计算)
在计算机中,除法运算可转换为累加
和左移
根据机器数的不同,可分为原码除法(不恢复余数法)
和补码除法(加减交替法)
强制类型转换
在采用补码
的机器上,同等长度的有符号数与无符号数
之间的强制类型转换的规则是保持位值不变
,只是改变了解释这些位的方式
在采用补码
的机器上,在不同字长的整数之间
进行强制类型转换时:当转换是带符号的从长到短
时,系统把多余的高位字长部分直接截断,低位直接赋值;当待转换的是带符号或不带符号的从短到长
,不仅把相应的位值相等,高位部分还会扩展为原数字的符号位
无符号数的符号位数值
看作是0
如果符号和长度都变了怎么办?????先变符号,后边长度(单一变量原则)
相关试题
大端存储
就是先存储高位,小端存储
是先存储低位
当使用补码
表示时,符号位相同,则数值位越大码值越大
数值最高位和符号位进位不同
则溢出(产生进位不一定代表溢出
)
3、浮点数的表示与运算
浮点数的表示
浮点数表示法是以适当的形式将比例因子(阶码)
表示在数据中,让小数点的位置根据需要而浮动
。这样,在位数有限的情况下,既扩大了数的表示范围,又保持了数的有效精度
浮点数通常被表示为
,r
是浮点数阶码的底与尾数的基数
(这是隐含的
,通常为2
)。E(Expnent)
和M(Mantissa)
都是带符号的定点数,E称为阶码,M称为尾数。所以浮点数是由阶码
和尾数
两部分组成的
阶符
和阶码的位数m
合起来反映浮点数的表示范围
及小数点的实际位置;数符
代表浮点数的符号
;尾数的位数n反映浮点数的精度
为了提高运算的精度
,需要充分地利用尾数的最高位,通常采用浮点数的规格化形式,即规定尾数的最高数位必须是一个有效值
非规格化的浮点数需要进行规格化操作才能变成规格化浮点数。所谓规格化操作就是通过调整一个非规格化浮点数的尾数和阶码的大小,使非零的浮点数
在尾数的最高数位上保证是一个有效值
规格化操作可分为左规和右规。左规左移
,可能进行多次;右规右移
,只需进行一次。规格化后
规格化表示的尾数
形式如下(这里的表示形式和IEEE 754标准
有点冲突):
- 正数原码规格化后:
- 负数原码规格化后:
- 正数补码规格化后:
- 负数补码规格化后(这个比较特殊):
当浮点数尾数的基数为2
时,原码
规格化数的尾数最高位一定是1
,补码
规格化数的尾数最高位一定与尾数符号位相反
。基数不同,浮点数的规格化形式也不同
浮点型数据一旦产生上溢
,计算机必须中断运算操作,进行溢出处理。浮点型数据下溢
时,浮点数值趋于零,计算机仅将其当做机器零处理
IEEE 754标准所规定的浮点数的存储标准
IEEE 754标准
规定常用的浮点数格式有float
、double
、临时浮点数
IEEE 754标准的浮点数(除临时浮点数外),是尾数用采取隐藏位策略的原码
表示,且阶码用移码
表示的浮点数
在IEEE 754标准
下,对于规格化的二进制浮点数,数值的最高位总是1,为了能使尾数多表示一位有效位,将这个1隐含。具体的隐含过程不明
在IEEE 754标准
下,阶码是以移码
形式存储的。float,偏置值为127
;double,偏置值为1023
。存储浮点数阶码部分之前,偏置值要先加到阶码真值上
,然后以移码的形式存储。需要使用的时候(人来使用),需要减去偏置值
浮点数较于定点数表示范围大
、精度低
、运算复杂
。浮点数中,运算结果超出尾数表示范围却不一定溢出,只有规格化后阶码超出所能表示的范围时
,才发生溢出
浮点数的加减运算
浮点数的运算的特点是阶码运算和尾数运算分开进行
。浮点数的加/减运算一律采用补码且使用双符号位
浮点数加/减运算分为以下步骤(具体使用在试题中练习):
- 对阶:
- 尾数求和:
- 规格化:
- 舍入:
- 溢出判断:
- 强制类型转换:
4、算术逻辑单元ALU
在计算机中,运算器
承担了执行各种算术和逻辑运算
的工作,运算器由算术逻辑单元ALU
、累加器
、状态寄存器
和通用寄存器组
等组成
ALU(Arithmetic Logic Unit)
的基本功能包括加、减、乘、除
四则运算,与、或、非、异或
等逻辑运算,以及移位、求补等
操作
计算机运行时,运算器的操作和操作种类由控制器决定
。运算器处理的数据来自存储器
;处理后的结果数据通常送回存储器
,或暂存在运算器中
串行加法器和并行加法器
加法器
是由全加器
再配以其他必要的逻辑电路
组成的。根据组成加法器的全加器个数
是单个还是多个,加法器有串行和并行之分
一位全加器
全加器(FA)
是最基本的加法单元,有加数
、加数
与低位传来的进位
共3个输入
,有本位和
与向高位的进位
共2个输出
串行加法器
在串行加法器中,只有一个全加器
,数据逐位
串行送入加法器中进行运算。如果操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位
地送回寄存器。进位触发器
用来寄存进位信号,以便参与下一次运算
串行加法器中器件少成本低
,但运算速度慢
,多用于某些低速的专用运算器
并行加法器
并行加法器由多个全加器
组成,其位数与机器字长相同,各位数据同时运算
并行加法器的最长运算时间
:虽然操作数的各位是同时提供的,但低位运算所产生的进位会影响高位的运算结果。所以最长运算时间主要是由进位信号的传递时间决定的
,而每个全加器本身的求和延迟只是次要因素
提高并行加法器速度的关键是尽量加快进位产生和传递的速度
并行加法器
中的每一个全加器
都有一个从低位送来的进位输入
和一个传送给高位的进位输出
。通常将传递进位信号的逻辑线路连接起来构成的进位网络称为进位链
进位表达式:
并行加法器的进位通常分为串行进位
与并行进位
把n个全加器串接起来
,就可进行两个n位数的相加,这种加法器称为串行进位的并行加法器
串行进位(也称行波进位)
:每一级进位直接依赖于前一级的进位,即进位信号是逐级形成的
低位运算产生进位所需要的时间将可能影响直至最高位运算的时间。所以串行进位的并行加法器
的最长运算时间主要是由进位信号的传递时间决定
的,位数越多延迟时间就越长,而全加器本身的求和延迟只为次要因素
,所以加快进位产生和提高传递的速度是关键
并行进位(也称先行进位、同时进位)
:各级进位信号同时形成
。各级低位产生的本级G和P信号
依次同时送到高位各全加器的输入,以使它们同时形成进位信号。可以起到加快进位产生和提高传递速度的目的
在并行进位方式中,所有的进位输出仅由
及最低进位输入
决定,而不依赖于其低位的进位输入
,因此各级进位输出可以同时产生
并行进位方式是快速的,与字长无关
。但是随着加法器位数的增加,相应的电路结构会变得很复杂
,所以完全采用并行进位是不现实的
分组并行进位方式
:把n位全加器分为若干小组,小组内的各位之间实行并行快速进位,组与组之间可以串行进位(单级先行进位方式
),也可以并行进位(多级先行进位方式
)
分组并行进位方式的优点是字长对加法时间影响甚小
,缺点是对应电路造价较高
算术逻辑单元的功能和结构
ALU是一种功能较强的组合逻辑电路
,它能进行多种算术运算和逻辑运算
。其核心是一个并行加法器
,该加法器也能执行逻辑运算
最简单的ALU是4位的
,74181芯片
为4位并行进位的并行加法器,74182芯片
是先行进位芯片
与74181类似的片位式芯片有Am2901
,该芯片有16个16位寄存器
,所以也称其为片位式运算器