校验码:
元件故障\噪声干扰等各种因素常常导致计算机在处理信息过程中出现错误,为了防止错误,可将信号采用专门的逻辑线路进行编码以检测错误,通常的做法是在每个字上添加一些校验位过来确定字中出现错误的位置。
(1).奇偶校验码
组成奇偶校验码的基本方法:在n位有效信息位上增加一个二进制校验位,构成一个n+1位奇偶校验码。
奇校验:使n+1位的奇偶校验码中1的个数为奇数
偶校验:使n+1位的奇偶校验码中1的个数为偶数
缺点:多位出错无法检测
定点数的运算
(只要涉及到加减运算一定是补码)
补码加法运算:
负数用补码表示后,可以和正数一样来处理,即当需要减去一个数x时,可以加上x对应的负数的补码[-x]补来代替
补码的加法公式:
小数:[x]补 + [y]补 = [x + y]补 (注:需要将mod 2 丢掉)
整数:[x]补 + [y]补 = [x + y]补 (注:需要将mod 2^(n+1) 丢掉)
注:符号位和数值位统一进行加法处理
补码减法运算公式
小数:[x]补 + [-y]补 = [x - y]补 (注:需要将mod 2 丢掉)
整数:[x]补 + [-y]补 = [x - y]补 (注:需要将mod 2^(n+1) 丢掉)
补码运算的基本规则:
1.运算的各个操作数均是补码表示,运算结果仍是补码
2.符号位与数值位一样参加 运算
3.若求和,则将两补码数直接相加,得到两数之和的补码;若求差,则将减数变成补码(由[y]补求[-y]补),然后与被减数相加,得到两数之差的补码
4.补码是对于确定的模而言,若运算结果超过模(有从符号位上产生的进位),则将模自动丢掉
溢出概念与检测
说明:两个正数相加的结果为负数,两个负数相加结果为正数这显然都是错的
第一种检测方法:两个同号的数相加结果发生了改变(即变号了)则发生了溢出
(两个异号数的相加不会发生溢出)
第二种检测方法:双符号位法,符号位有两位用“00”表示正,“11”表示负。如果两个数相加后,其结果出现“00”或者”11“则表示没有溢出,出现”01“或”10“两种组合时,表示溢出
第三种检测方法:单符号位法,当最高数值位产生进位而符号位无进位时,产生上溢,当最高数值位无进位而符号位有进位时,产生下溢,
即:当最高数值位和符号位都进位时或者都没进位则没溢出,如果只有一者有进位则溢出
任何数和0异或不变,和1异或取反;
定点数乘法运算
对于乘法运算,我们可以采用手工计算的方式,但对于计算机而言只有加减法,以下我们分析了对于两个定点数的乘法运算计算机是怎样执行的?
原码一位乘法:计算机乘法运算执行过程
A=-0.1101 B=0.1011 计算 A*B,执行过程如下
说明:因为是四位二进制进行乘法运算,所以总共需要加四次(遇见1则加上被乘数,遇见0则加上0,然后整体右移),并且右移四次;
初始化为0.0000,然后从乘数的地位开始计算,
1.取出乘数最低位为1,所以加上被乘数,即初始数据0.0000和被乘数0.1101相加结果为0.1101,然后连接乘数1011(即0.1101 1011)一起右移一位得0.0110 1101
2.取出第二位为1,所以加上被乘数,即0.0110+0.1101值为1.0011,然后连接乘数1.0011 1101整体右移一位得0.1001 1110
3.取出第三位为0,加上0,结果不变0.1001 1110整体右移得0.0100 1111
4.取出第四位为1,加上被乘数,即0.0100 + 0.1101值为1.0001 然后连接乘数1.0001 1111整体右移一位得0.1000 1111
5.乘积的符号位A异或B=1异或0=1
得结果的绝对值为0.1000 1111,然后带上符号位[A * B]原=1.1000 1111
小结:乘法运算可用加和移位实现,n=4,即加4次,移4次
由乘数的末位决定被乘数是否和原部分积相加(末位为1则加上被乘数,为0则加上0),然后向右移一位形成新的部分积,同时乘数右移一位(末位移丢),空出高位存放部分积的地位(我们上面所说的连起来整体右移 目的是便于理解)
总体步骤就是:
(1).乘积的符号位进行异或
(2).数值部分按绝对值相乘