计组第二章-数据的表示和运算。

  • 目录

    进位计数制二进制八进制、十进制十六进制

    BCD码8421码余三码2421码

    字符与字符串

    ASCII码:通常用8bit表示一个字符,最高位都为0。

    GB2312-80区位码国标码(交换码)内码(机内码)外码(输入码)字形码(输出码)

    字符串(汉字)大端模式小端模式

    奇偶校验奇校验码偶校验码

    海(汉)明码

    循环冗余校验码(CRC码)

    有符号数与无符号数。

    无符号数

    有符号数原码反码补码移码

    浮点数(科学计数法 )

    浮点数规格化

    IEEE 754 标准

    浮点数的运算

    定点数

    移位运算算数移位逻辑移位循环移位

    加减运算

    乘法运算

    除法运算

    原码除法:恢复余数法

    原码除法:加减交替法(不恢复余数法)

    补码除法:加减交替法

    强制类型转换

    算数逻辑单元

    1.简介

    2.ALU组成

    3.优先级:与>或。

    4.电路门的认识。

    5.全加器

    5.1一位全加器

    5.2串行进位的并行加法器。

    5.3并行进位的并行加法器

     5.4单级先行进位方式。

     5.5多级先行进位方式。


  • 进位计数制

    • 二进制

    • 八进制:对应三位二进制

    • 十进制

    • 十六进制:对应四位二进制

    • R进制—>十进制:每一位数码乘以其位权(小数部分的位权小于1,乘以位权,相当除法)
    • 十进制—>R进制:整数%R(取余,尾余数是高位);小数*R(取整,首位是高位。除以位权,相当乘法)
    • 真数:用正负号,以十进制形式。比如+15,-20
    • 机器数:正负号被数字化,以二进制表示数值。分为定点数和浮点数
    • 基数:就是每个数码位可以有多少个数字表示。如十进制的基数为十,数码可以取0~9。R进制的基数为R。
    • 位权:数制中每一固定位置对应的单位值。如十进制第2位的位权是 10,第三位是100。
  • BCD码

    • 定义:为了计算机直接使用十进制数,用四位二进制数表示一位十进制数,9的BCD码为1001、20的BCD码为0010 0000、248的BCD码为0010 0100 1000
    • 8421码:8、4、2、1分别对应每一位的权值,0000~1001分别对应0~9

    • 余三码:8421码+0011(加上3),15除以12余三。

    • 2421码:2、4、2、1分别对应每一位的权值,0~4最高位为0,5~9最高位为1。

  • 字符与字符串

    • ASCII码:通常用8bit表示一个字符,最高位都为0。

    • 汉字(GB2312-80)

      • 区位码:用第一个字节表示行,第二个字节表示列,这就叫做区位码,第一个字节称为区码,第二个字节为位码

      • 国标码(交换码):虽然GB2312为中文编码,我们也要使用到英文字母等字符,况且当时ASCII已经通用,所以要使GB2312能够兼容ASCII才行。国标码中是分别将区位码中的“区”和“位”各自加上32(20H)的,因此国标码属于双字节码。(这里还没兼容,会冲突)

      • 原来,当时在制定GB2312时,决定对ASCII中的可打印字符,也就是英文字母、数字和符号部分(33~126,127为不可打印的DEL)重新编入GB2312中,以两个字节表示,称之为全角字符(全角字符在屏幕上的显示宽度为ASCII字符的两倍,后来也因此而将对应的ASCII字符称之为半角字符)。而对于ASCII中前32个不可显示也不可打印的控制字符(ASCII码为0~31),以及第33个可显示但不可打印的空格字符(ASCII码为32)等一共33个不可打印字符的编码则直接沿用,不再重新编码。
      • 内码(机内码):国标码还不能直接在计算机上使用,因为这样还是会和ASCII中的除控制字符外的其他字符冲突(冲突的结果就是导致乱码)。拿“中”字举个例子,它的国标码中的高位字节为86,这会与ASCII中大写字母'V'冲突,低位字节为80,与'P'冲突。因此为避免这种情况,规定国标码中的每个字节的最高位都从0换成1,即相当于每个字节都再加上128(即80H),从而得到国标码的“机内码”表示,简称“内码”。由于ASCII码只用了一个字节中的低7位,利用这个特性,这个首位(最高位)上的“1”就可以作为识别汉字编码的标志,计算机在处理到首位是“1”的编码时就把它理解为汉字,在处理到首位是“0”的编码时就把它理解为ASCII字符。因此,内码才是字符用GB2312编码后的在计算机中存储的形式。

      • 外码(输入码、输入法编码):是用来将汉字输入到计算机中的一组键盘符号,是作为汉字输入用的编码。

      • 字形码(字型码、字模码、输出码): 为了将汉字在显示器或打印机上输出,把汉字按图形符号设计成点阵图,就得到了相应的点阵代码(字形码)。也就是用0、1表示汉字的字形,将汉字放入n行*n列的正方形(点阵)内,该正方形共有n^2个小方格,每个小方格用一位二进制表示,凡是笔划经过的方格值为1,未经过的值为0。

    • 字符串(如多字节汉字)

      • 多字节数据(如汉字):在所有计算机中,多字节数据都被存放在连续的字节序列中。比如(机内码=B0 A1H,B0是高字节,A1是低字节)
        • 大端模式:将数据的最高有效字节存放在低地址单位中。B0 A1

        • 小端模式:将数据的最高有效字节存放在高地址单位中。A1 B0

        • 注意:是对于一个字符中的多字节排序
      • 从低地址到高地址逐个字符存储,常采用‘\0’作为结尾标志。
  • 奇偶校验

    • 实现原理: 在原编码中加一个校验位,则原编码就变成了校验码,它的码距为2,可以检查出奇数位错误,但不能检查出偶数位错误,增加的冗余位为奇偶校验位,一般校验位设置在原编码的最左边或最右边。
    • 码字:由若干位代码组成的一个字。
    • 码字间的距离:两个码字之间有几个位不同。
    • 码距:简单来说就是两个二进制数比较,在同一数位的地方,数位值不同的个数有多少个,即码距,也称海明距离;(码距大于1有检错能力,等于1无检错能力)
      • 两种方法计算码距。比如0100和1111
      • 直接观察法:可以看出,有3个数位值不同,所以码距为3.
      • 异或计算法:0100⊕1111=1011 ,结果为1011,里面有几个1就代表有多少个数位值不同,即码距是多少,这里码距是3。
    • 奇校验码:整个校验码(信息位+校验位)中1的个数位奇数

    • 偶校验码:整个校验码(信息位+校验位)中1的个数位偶数

    • 硬件实现 :异或运算(模2加法)。
      • 所谓“模2加法”就是0和1之间的加法,你可以把0和1分别想成是“偶数”和“奇数”,那么前两个式子分别代表:偶数加偶数等于偶数,奇数加偶数等于奇数,而式1+1=0就是奇数加奇数等于偶数
  • 海(汉)明码

    • 实现原理:在有效信息位中加入几个校验位形成海明码,并把海明码的每一个二进制位分配到几个奇偶校验组中。当某一位出错后,就会引起有关的几个校验位的值发生变化。
    • 特点:一种多重奇偶校验码。可以发现错误,定位错误位置,自动纠正错误。 可以检测双比特错误,但只能纠正单比特错误。
    • 确定校验位 Pi 位置:校验位 pi 在海明位号位 2 i-1 的位置上。
    • 根据公式确定校验位个数:2**k ≥ n+k+1(信息位 n,校验位 k)
    • 检验原理:被校验数据位的海明码位号 = 校验该数据位的各校验位海明位号之和,比如校验D3,它的海明位号H6为6,那么校验它的校验位为P3和P2,因为他们的海明位号H4和H2加起来等于6。
    • 全校验位:一般海明码使用的时候要加上全校验位,对整体偶校验。
      • S3 S2 S1 = 0 0 0 且全体偶校验成功。 无错误
      • S3 S2 S1 !=0 0 0 且全体偶校验失败。 有一位错,可纠正。
      • S3 S2 S1 !=0 0 0 且全体偶校验成功。 有两位错误,要重传。
  • 循环冗余校验码(CRC码)

    • 模2运算:分为模2加、模2减、模2乘、模2除,不考虑进位和借位。
    • 基本思想:校验码中的一种。在K位信息位后拼接R位检验位,组成CRC码,这种编码也称(N,R)码(N为K+R)。
    • 特点:可以发现错误,定位错误位置,自动纠正错误。可检测出所有奇数个错误、所有双比特的错误、所有小于等于校验位长度的连续错误。
    • 原码如何编码生成CRC码?
      • 首先,发送端和接受端会有一个生成多项式G(x)约定,生成多项式G(x)的最高次幂为R。任意一个二进制数码都可用一个系数为0或1的多项式与之对应。比如:二进制数码 1101 对应的G(x)=1*X3+1*X2+0*X1+1*X0= X3+X2+1
      • 在发送端,将要传送的K位二进制信息码左移R位(除数位数=R+1),将它与生成多项式G(x)所对应的的二进制数码进行模2除法,产生余数,生成一个R位检验码,并附在信息码后,构成一个新的二进制码(CRC)码,共K+R位。
  • 有符号数与无符号数。

    • 定点格式:即约定机器中所有数据的小数点位置固定不变。 由于约定的小数点位置固定不变,小数点就不再使用 “ . ” 表示。原理上,小数点位置固定在哪一位都可以,但是通常将数据表示为纯小数或纯整数。
    • 纯整数:符号位+尾数+小数点;表示纯小数,小数点位于最低位后面

    • 纯小数:符号位+小数点+尾数;表示纯整数,小数点位于符号位后面

    • 无符号数:没有符号位,相当于数的绝对值。通常只有无符号整数,而没有无符号小数。

    • 有符号数

      • 原码:用尾数表示真值的绝对值,符号位“0/1”对应 “正/负”

        • [+0]原=0000 0000; [-0]原=1000 0000;
      • 反码:若符号位为0, 则反码与原码相同;若符号位为1,则数值位全部取反

        • “反码”只是“原码”转变为“补码”的个中间状态, 实际中并没什么卵用。
        • [+0]反=0000 0000; [-0]反=1111 1111;
      • 补码:正数的补码=原码;负数的补码=反码末位+1(要考虑进位)。

        • 将负数补码转回原码的方法相同:尾数取反,末位+1。为什么+1,因为1111 1111是255,差1进位,所以要加1。进位代表负数变成0;
        • [+0]补= [-0]补= 0000 0000;
        • 定点整数补码:[x]补 = 1,000 0000表示x=-128
        • 定点小数补码:[x]补 = 1.000 0000表示x=-1
      • 移码:补码的基础上将符号位取反,注意:移码只能用于表示整数。

        • 移码表示的整数很方便对比大小。
        • [+0]移= [-0]移= 1000 0000;
        • [-128]移=0000 0000;
  • 浮点数(科学计数法 )

    • 特点:小数点位置可以浮动的数据。就像数学中 1222.2*10^3也可以表示为1.2222*10^6;
    • 浮点数的表示:阶符+阶码的数值部分+数符+位数的数值部分(阶码+尾数)

      • 浮点数的基础。
        • 尾数给出的具体数值,阶码指明小数点前移、后移多少位。
        • 阶码通常用补码、移码表示的定点整数。
        • 尾数通常用补码、原码表示的定点小数。
      • 浮点数规格化

        • 尾数的最高数值位必须是一个有效位,即为1。
        • 左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数算数左移一位,阶码减1。
        • 右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数算数右移一位,阶码加1。
        • 原码表示的尾数规格化:尾数的最高数值位必须是1。
        • 补码表示的尾数规格化:尾数的最高数值位必须和尾数符号位相反。(因为符合0正数时有效位是1;符号1负数时有效位是0,反过来也是1)
      • 浮点数的表示范围
        • 阶码E反映浮点数的表示范围及小数点的实际位置。
        • 尾数M的数值部分的位数n反映浮点数的精度。
    • IEEE 754 标准:

      • 阶码真值=移码-偏置值(偏移量可能是127)【或2**(n-1)】(原理:负数已经少了128,再减去128等于真值,而正数多了128,减去128后就是真值)
      • 阶码全1(-128)、全0(-127)用作特殊用途,所以阶码可以表示的范围是-126~127。
      • 当阶码E全为0,尾数M不全为0时,表示非规格化小数士(0.xx) * 2**-126(最小的阶码)
      • 当阶码E全为0,尾数M全为0时,表示真值士0
      • 当阶码E全为1,尾数M全为0时,表示无穷大 土∞
      • 当阶码E全为1,尾数M不全为0时, 表示非数值“NaN" (Not a Number)
    • 浮点数的运算:

      • 加减运算:

        • 对阶:阶码对齐后才能加减,小阶向大阶。规则是阶码小的向阶码大的数对齐,若阶码相等则不用对阶;
        • 尾数加减:通常采用双符号位表示尾数, 这样可以挽救尾数溢出。
        • 规格化:
          • 左规:尾数最高数值位为无效位时,尾数左移,阶码减1。
          • 右规:尾数双符号位不同时,尾数右移,阶码加1。(比如01,如果是11变00,则可以看为是负数转为正数)
        • 舍入:尾数的位数有限导致的问题, 常用方法:0舍1入、 恒置1。
        • 溢出判断:
          • 阶码上溢:抛出异常(中断)。
          • 阶码下溢:按机器0处理。
      • C强制类型转换:

        • 无损:
          • char->int->long->double
          • float->double
        • 有损:
          • int->float:可能会损失精度(float尾数的数值位有1+23位)
          • float->int:可能会溢出, 也可能会损失精度(如小数转整数)
  • 定点数

    • 移位运算

      • 移位:通过改变各个数码位和小数点的相对位置,从而改变各数码位的位权。可用移位运算实现乘法、除法。
      • 算数移位

        • 注意:由于原、反、补码位数有限,因此某些时候算数移位不能精确等效乘法、除法。
        • 原码::符号位不参与移位。
          • 右移:高位补0,低位舍弃。若舍弃的位=0,则相当于÷2;若舍弃的位≠0,则会丢失精度
          • 左移:低位补0,高位舍弃。若舍弃的位=0,则相当于×2;若舍弃的位≠0,则会出现严重误差
        • 反码:符号位不参与移位。
          • 反码的算数移位——正数的反码与原码相同,因此对正数反码的移位运算也和原码相同。
            • 右移:高位补0,低位舍弃。
            • 左移:低位补0,高位舍弃
          • 反码的算数移位——负数的反码数值位与原码相反,因此负数反码的移位运算规则如下,
            • 右移:高位补1,低位舍弃。
            • 左移:低位补1,高位舍弃。
        • 补码:符号位不参与移位。
          • 补码的算数移位——正数的补码与原码相同,因此对正数补码的移位运算也和原码相同。
            • 右移:高位补0,低位舍弃。
            • 左移:低位补0,高位舍弃。
          • 补码的算数移位——负数补码=反码末位+1 导致反码最右边几个连续的1都因进位而变为0,直到进位碰到第一个0为止。
            • 规律——负数补码中,最右边的1及其右边同原码。最右边的1的左边同反码。负数补码的算数移位规则如下:
            • 右移(同反码):高位补1,低位舍弃。
            • 左移(同原码):低位补0,高位舍弃。
      • 逻辑移位:可以把逻辑移位看作是对“无符号数”的算数移位

        • 逻辑右移:高位补0,低位舍弃。
        • 逻辑左移:低位补0,高位舍弃。
      • 循环移位

        • 不带进位位
          • 用移出的位补上空缺的位。
        • 带进位位
          • 移出的位放到进位位,原进位位补上空缺。
    • 加减运算

      • 原码的加减法
        • 原码的加法运算:
          •   正+正 = 绝对值做加法,结果为正
          •   负+负 = 绝对值做加法,结果为负
          •   正+负 = 绝对值大的减绝对值小的,符号位同绝对值大的数
        • 原码的减法运算
          • “减数”符号取反,转变为加法
        • 可以看出,原码的加法逻辑太难了,所以计算机中通常用补码来实现加减运算
      • 补码的加减法
        • 对于补码来说,无论加法还是减法,最后都会转变成加法,由加法器实现运算,符号位也参与运算。
      • 溢出判断
        • 只有“正数+正数”才会上溢——正+正=负
          • 方法一:采用一位符号位,离散数学方式进行逻辑表达式计算,而在硬件实现上也只需与门、或门、非门就可以实现逻辑表达式的计算
            • 利用正正是否变为负,负负是否变为正。来判断溢出。
        • 只有“负数+负数”才会下溢——负+负=正
        • 溢出判断的三种方法,其中第三种:双符号位方法中注意理解模4补码、模2补码的概念
          • 方法二:采用一位符号位,根据数据位进位情况判断溢出
            • 根据最高数据位进位与原符号位是否一致,不一样则溢出。
          • 方法三:采用双符号位,正数的符号位为00,负数的符号位为11,在相加得到结果后,如符号位变成01则表示正确的符号位为0,实际的符号位为1,发生了上溢
          • 注意:实际存储时只存储1个符号位,运算时会复制一个符号位
          • 双符号位补码又称:模4补码
          • 单符号位补码又称:模2补码
      • 符号扩展

        • 避免溢出可以使用符号扩展的方法:将短数据扩展为长数据。如int->long
        • 符号扩展的实现,注意负整数反码、补码的补位添1,负小数补码添0、反码添1
        • 整数补高位,小数补低位。
    • 乘法运算

      • 原码的一位乘法:在运算器中,MQ(乘商寄存器)存储乘数、X(通用寄存器)存储被乘数、ACC存储乘积高位,符号位单独处理,对于数值位计算如下:初始时,ACC全0,MQ乘数,X被乘数接下来,乘数最低位若为1,则ACC加上被乘数;若为0,则ACC加0然后,ACC和MQ进行逻辑右移,高位补0,ACC的低位移到MQ。注:每次加法后都要进行逻辑右移,重复n次(n位数值,1位符号位,符号位不参与运算,最终符号位通过异或确定)。
      • 补码的一位乘法(补码的算数右移(符号位是什么就补什么),因为有符号,不一定是补0)
        • 与原码运算的硬件方式不同,在ACC\MQ\X中直接存储带有符号位的乘数,且MQ(n+2位,符号位和辅助位)中多存储一位辅助位,初始为0;X和ACC也都使用用双符号位代表正负
        • 记住计算规则:
          • 辅助位y 5 - MQ最低位y 4= 1时,A C C + [ x ] 补
          • 辅助位y 5 - MQ最低位y 4= 0时,A C C + 0
          • 辅助位y 5 - MQ最低位y 4= -1时,A C C + [- x ] 补
          • 在计算n次后最后还要多一次加法,此时的MQ最低位y 4 就是乘数的符号位。
        • 最终计算结果为最后一次加法的结果接上当前乘数的前n位。
    • 除法运算

      • 原码除法:恢复余数法

        • 符号位单独处理:符号位的异或运算
        • 恢复余数法:被除数-|除数| ,当余数为负时商0,并+|除数|,再左移,再-|除数|(此刻又看余数是否为负,不为负则商1,继续-|除数|)
        • 注意:符号位不参与运算,并要求|被除数|<|除数|(不然相减不为负数)。
      • 原码除法:加减交替法(不恢复余数法)

        • 加减交替法:被除数先减 |除数|,当余数为负时商0,并左移,再+|除数|,如果为正,则商1 ,并左移,再-|除数|。
        • 注意:符号位不参与运算,并要求|被除数|<|除数|(不然相减不为负数),加减n+1或n+2次,左移n次,最后一次加减不移位。
      • 补码除法:加减交替法

        • 符号位参与运算,采用双符号位,加减n+1次(n为数据位,包括符号位),逻辑左移。最后一位商1
        • 1.被除数与除数同号,被除数减去除数;被除数与除数异号,被除数加上除数(先加减,再看余数和除数是否同号,再商,在左移,在加减)
        • 2.余数和除数同号,商为1,余数左移一位,再减除数;余数和除数异号,商为0,余数左移一位,再加除数。
    • 强制类型转换

      • 总结:有符号数转为无符号数时,将符号位当成数据位。
      • 长整型变为短整型:高位截断,保留低位。
      • 短整型变为长整型:符号位不变,高位补0/1

算数逻辑单元

1.简介
算术逻辑单元简称“ALU”,ALU是计算机的数学大脑,也是现代计算机的基石。
ALU在计算机里负责运算的组件,基本所有部件都用到它。

2.ALU组成
ALU共有2个单元:1个算术单元与1个逻辑单元。

3.优先级:与>或。(类似乘法、加法)

4.电路门的认识

图中的M=1做逻辑运算,M=0做算数运算。而S0~S3这四位代表16种可能,这在算数(或逻辑)运算的时候可以表示16(加减乘除等)种算数(或逻辑)运算。

图1

优先级:与>或。(类似乘法、加法)

5.全加器

5.1一位全加器

5.2串行进位的并行加法器。(多个加法器串连在一起,直接用进位结果传递)

5.3并行进位的并行加法器(把二进制数传递过去高位,该全加器自己计算出进位值)

C1=A1B1(因为第一个全加器没有进位)

C2=A2B2+(A2异或B2)C1     =     A2B2+(A2异或B2)(A1B1)

C3=A3B3+(A3异或B3)C2     =     A3B3+(A3异或B3) (A2B2+(A2异或B2)(A1B1))

 5.4单级先行进位方式(又称“组内并行、组间串行”进位方式)。

CLA加法器必须等低位加法器传进来->进位结果才能计算,好处就是:该进位一进来,该加法器中最高位的那个全加器就可以计算出该位->进位结果,并把进位结果传到更高位加法器。

 5.5多级先行进位方式(又称“组内并行、组间并行”进位方式)。

把加法器中的Gi、Pi、C0都传入到CLA电路中,思路是各个加法器把自身数据传出去。而CLA电路中计算好的进位结果则传进来加法器,这时候加法器内就可以进行并行进位运算了。

三个符号可参照:C1=G1+P1C0(如图中第一个加传进来法器传出来的G1、P1参照:c4=g4+p4C3,G1=g4,P1=p4(g3+p3(g2+p2(g1+p1C0))),其中C0不包含进去)

注意:Gi直接就是结果。Pi有时候可以直接计算出来结果。(比如P1中:若p4=0,结果就是0;若p4=1,且g3=1,结果就是1;若p4=1,且p3=0,结果就是0)

5.6相加两个5位数字,叫两个数字叫A和B,从A和B的第一位开始,叫A0和B0。第一次加法,不用处理任何进位 ,来加这2个数字,输出叫sum0,然后,加A1和B1,因为A0和B0的结果有可能进位,所以这次要用全加器,除了A1和B1,还要连上进位。输出叫sum1,然后,把全加器的进位连到下个全加器的输入,处理A2和B2。

6.数字电路的应用。

或电路

在这里插入图片描述

异或电路

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值