小宝贝们
今天我们就和数字打打交道,一片博客来学会计算机组成原理中数据的表示和运算,说实话不学不知道,一学吓一跳,过段时间又忘掉、考研党们,赶紧把他收藏起来以免以后忘记了
目录
一、数制与编码
1、进位计数制及其相互转换
2、真值和机器数…
3、BCD码
4、字符与字符串
5、校验码
二、定点数的表示与运算
1、定点数的表示
2、定点数的运算
三、浮点数的表示与运算
1、浮点数的表示
2、浮点数的加减运算
一、数制与编码
后缀:
二进制:B
八进制:Q
十进制:D
十六进制:H
1、进位计数制及其相互转换
二进制有两种状态0和1,1真,0假
不同进制之间的相互转换
这里就用例题来说明了
(1)二进制转换为八进制和十六进制
原则:分为3位(八进制)或4位一组(十六进制),缺少的补0
16进制0~ 9, 10~ 15A~F
(二)任意进制转换为十进制
例题:
(三)十进制转换为任意进制
十进制123.675转换为二进制
解:整数部分
所以整数部分123=1111011
小数部分
所以0.6875=0.1011
2、真值和机器数
+为正数,-为负数
带±号的数为真值
0代表正,1代表负数
符号数字化为及其数字化
3、BCD码
1)8421码:有权码8421
2)余三码:无权码在8421码上加0011
3)2421码:有权码2421
4、字符与字符串
ASCLL码
5、校验码
码距大于等于2的具有校验能力
能够发现或者自动纠错的数据编码(计算机网络差错控制)通过增加冗余码
1)奇偶校验码
码距等于2
奇校验码:整个校验码中1的个数为奇数
偶校验码:整个校验码中1的个数为偶数
缺点:具有局限性,奇偶校验只能发现数据代码中奇数位的出错情况,但不能纠正错误
例题:
给出两个编码1001101和1010111的奇校验码和偶校验码
1001101 :11001101(奇校验)01001101(偶校验)
1010111:01010111(奇校验) 11010111(偶校验)
2)海明码
可以发现错位,指出错位的位置,并且为自动纠错提供依据
通过这道例题来了解海明码
例题:
3)循环冗余校验码
二、定点数的表示与运算
1、定点数的表示
小数点位置固定 X=x0x1x2x3……xn(其中x0为符号位)
定点小数 | 定点整数 | ||
---|---|---|---|
定义 | 小数点固定在最高有效数位之前,符号位之后 | 纯整数,小数点位置隐含固定在最低有效位之后 | |
x0=0时真值 | 1-2-n | 2n-1 | |
x0=1时真值 | -(1-2-n) | -(2n-1) |
2)最高位表示该数符号
纯小数 | 纯整数 | |
---|---|---|
源码 | [x]原=x(1>x>=0),=1-x=1+|x|(0>=x>-1) | [x]原=0,x(2n>x>=0),=2n-x=2n+|x|(0>=x>-2n) |
补码 | [x]补=x(1>x>=0),=2+x=2-|x|(0>=x>-1) | [x]补=0,x(2n>x>=0),=2n+1+x=2n+1-|x|(0>=x>-2n) |
反码 | 正数x1=+1011,x2=-1011字长为8【x1】反=0,0001011;【x2】反1,1110100 | |
移码 | 只能用来表示整数就是在真值上加一个常数这个常数通常是2n | 例题若正数x1=+10101,x2=-10101,字长为8位移码【x1】移=27+10101=1,0010101;【x2】移=27+(-10101)=0,1101011 |
2、定点数的运算
移位运算,有符号的移位称为算术移位,无符号数逻辑代码为逻辑移位
(1)(算术移位)移动过程符号不变
(2)(逻辑移位)逻辑左移时,高位丢,低位填0
(3)循环移位
带进位标志位CF(大循环)
不带(小循环)
特点:移出得数位又被移入数据中,是否带进位看是否将进位标志位加入循环位移中
原码定点数加减法运算
加法规则:先判断符号位,相同绝对值相加,不同绝对值大的减去绝对值小的,符号位与绝对值大的相同
减法规则:将减数符号位取反,后被减数和他按原码相加运算.
注意:机器字长左边出现溢出,将溢出位丢掉
补码定点数加减法运算
设机器字长(n+1)计算机普遍采用
(1)参与运算的两个操作数均用补码表示
(2)按二进制运算逢二进一
(3)符号位与数值位按同样规则一起运算,符号位运算产生的进位要丢掉,结果的符号位由运算得出
(4)补码加减法运算根据下面公式
当参与运算的数是定点小数,模M=2;当参与运算的是定点整数,模M=2n+1
[A+B]补=[A]补+[B]补(Mod M)
[A-B]补=[A]补+[-B]补(Mod M)
Mod M是为了将溢出位丢掉
(5)补码结果还是补码
注意:对于整数原码=反码=补码=真值
溢出概念和判别方法
只有两个符号相同的数相加或两个符号相异的数相减才可以产生溢出,产生溢出结果是错误的
(1)采用一位符号
无论是加法还是减法,只要参加操作的两个数符号相同,结果又与原操作数符号不同,则表示溢出
(2)采用双符号位
运算结果的两个符号位Ss1Ss2相同,表示未溢出,不同表示溢出,最高为表示真正的符号位
(3)采用一位符号位根据数据位的进位情况判断溢出
若符号位的进位CS与最高数位的进位C1相同,则无溢出,反之溢出
定点数乘法运算
通过累加和右移实现
(1)原码一位乘法
符号位与数值位分开
乘积符号是由两个数的符号位“异或”形成的
数值部分两个数的绝对值相乘之积
设[X] 原=xs.x1x2…xn, , [X] 原=ys.y1y2…yn,则运算规则如下:
①被乘数和乘数均取绝对值参加运算,符号位为xs异或ys
①部分积的长度同被乘数,取n+1位,以便存放乘法过程中绝对值大于等于1的值,初值为0。
③从乘数的最低位yn,开始判断:若yn=1,则部分积加上被乘|x|,然后右移一位;若yn=0,则部分积加上0,然后右移一位。
④)重复步骤③,判断n次。
由于乘积的数值部分是两数绝对值相乘的结果,因此原码一位乘法运算过程中的右移操作均为逻辑右移。
(2)补码一位乘法(Booth算法)
规则:
1)符号位参与预算,运算的数均以补码表示
2)乘数末尾加一位yn+1初值为0
3)移位按补码右移规则
定点数的除法运算
累加左移
(1)原码除法运算
①商的符号QS=Xs取余YS
②商的数值:lQ|=|X|/|Y|。
求|Q|的不恢复余数法运算规则如下。
①符号位不参加运算。
②先用被除数减去除数(|X|-|Y|=|X|+(-|Y|)=|X|+[-|Y|补]),当余数为正时,商上1,余数和商左移一位,再减去除数;当余数为负时,商上0,余数和商左移一位,再加上除数。
③当第n+1步余数为负时,需加上|Y得到第n+1步正确的余数(余数与被除数同号)
(2)补码除法运算
符号位与数值位一起参与运算,
上商的原则根据余数和除数的符号位共同决定,同号上商“1”,异号上商“0”;最后一步商恒置“1”。
加减交替法的规则如下:
①符号位参加运算,除数与被除数均用补码表示,商和余数也用补码表示。
②若被除数与除数同号,则被除数减去除数;若被除数与除数异号,则被除数加上除数。
③若余数与除数同号,则商上1,余数左移一位减去除数;若余数与除数异号,则商上0,余数左移一位加上除数。
④重复执行第③步操作n次。
⑤若对商的精度没有特殊要求,则一般采用“末位恒置1”法。
三、浮点数的表示与运算
1、浮点数的表示
小数点的位置根据需要而浮动,这就是浮点数。
例如:
N=M×rE
式中:r为浮点数阶码的底,与尾数的基数相同,通常r=2。E和M都是带符号数E叫做阶码,M叫做尾数。
在大多数计算机中,尾数为纯小数,常用原码或补码表示;阶码为纯整数,常用移码或补码表示
(2)规格化浮点数
规定尾数的最高位必须是一个有效值
左规:将尾数算术左移一位,阶码减一,可能需要多次
右规:结果尾数出现溢出,将尾数算术右移一位,阶码加一,只需要一次
IEEE 754浮点数标准
S(1位) | E(8位) | M(23位) |
---|
其中S为尾符,E为阶码,M为尾数
规格化
短浮点数的真值(-1)s×1.M×2E-127
长浮点数的真值(-1)s×1.M×2E-1023
注:s=0表示正数,s=1表示负数
短浮点数E的取值1~254,M等于32位
长浮点数E的取值1~2046,M等于52位
float(单精度)表示最大正整数2128-2104
2、浮点数的加减运算
阶码运算和尾码运算分开进行,UI版采用补码步骤:
(1)对阶:小数点位置对其
(2)尾数求和:
(3)规格化:
(4)舍入
(5)溢出判断
补充:
1.在C语言中不同类型混合运算遵守“类型提升”,低类型转换为高类型,最终结果是double
规律char——int——long——double
2.各编码的的数值范围
3.浮点数的表示范围