计组高分笔记:【02】数据的表示和运算 「进制转换 | 奇偶校验 | 海明码 | 循环冗余码CRC | 定点数、浮点数的表示与运算 | 算术逻辑单元(ALU)」

导读:本篇文章讲解 计组高分笔记:【02】数据的表示和运算 「进制转换 | 奇偶校验 | 海明码 | 循环冗余码CRC | 定点数、浮点数的表示与运算 | 算术逻辑单元(ALU)」,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 数制与编码

1.1 进制转换

在这里插入图片描述

注意:

  1. 比如1 / 2
    在这里插入图片描述
  2. 真值:符号表示正负,如“+5”。
    机器数:机器中的数,0和1表示正负,如“0,101”
    机器码:指数在电脑中存放值,为补码。若指名为无符号数,则按无符号数。
  3. 2^16 – 1 = 65535

1.2 BCD码

采用四位二进制数表示十进制数, 故有6种情况浪费了。
在这里插入图片描述
在这里插入图片描述

1.3 字符与字符串

在这里插入图片描述

在这里插入图片描述

1.4 校验码

在这里插入图片描述
在这里插入图片描述

1.4.1 奇偶校验(1位检错,不能纠错)

在这里插入图片描述

注意:

  1. 一种编码方式的码距很重要,用来衡量该方案是否有纠错能力。
  2. 无论是什么校验,我们默认校验位是不发生跳变的。【做题的时候特别注意】所以一位奇偶校验在检测一位数是100%能检测出错误。
    在这里插入图片描述

在这里插入图片描述

1.4.2 海明码(2位检错,1位纠错)

在这里插入图片描述

上述的海明码还不是实际的海明码,因为其只有一位检错的能力,实际上,海明码具有一位纠错,二位检错能力。是因为在其最高位还添加了一个校验位。如下图所示:
在这里插入图片描述
在这里插入图片描述

1.6 循环冗余码CRC(只能检错,纠错1位或多位由多项式决定)

在这里插入图片描述

在这里插入图片描述

注意:

  1. 在大量数据传送过程中,通常使用CRC校验,其比奇偶校验或者海明码可靠。实际上网络中的数据传输使用的就是CRC
  2. 检测时,若余数为非0,则表示出错。同时,若按约定的多项式G(x)得到的校验位k满足2^k >= n + k + 1,则有一位纠错能力。
    在这里插入图片描述
  3. 在CRC中,接收端检测出错误后,有如下三种纠错方法:
    1. 请求重发
    2. 删除数据(触发自动触发)
    3. 通过余数值自行纠正
  4. CRC校验可以通过硬件完成。
    在这里插入图片描述

2. 数的表示与运算

* 数的分类
	1. 按小数点的位置分
		1. 定点数:平时写的小数,如 6.3
		2. 浮点数:科学计数法表示的小数,如 3.14×10^6
	2. 按符号分
		1. 无符号数
			* 注意:通常只有无符号整数,没有无符号小数。
		2. 有符号数

2.1 定点数的表示与运算

2.1.1 定点数的表示

无符号定点数很简单,这里不做说明。下面讨论有符号定点数的格式:

2.1.1.1 有符号定点数格式

在这里插入图片描述

注意:

  1. 定点整数和定点小数的默认小数点位置不一样。
  2. 有符号定点数的整数和小数部分是分开存放的,比如19.12,会分成19.12分别单独存放。

2.1.1.2 数值的表示(原码、反码、补码、移码)

  1. 原码:真值的绝对值
  2. 反码:在原码的基础上,符号位不变,数值部分全部取反
  3. 补码:在反码的基础上+1
  4. 移码:在补码的基础上,将符号位取反。(为了方便比较数的大小)

注意:

  1. 0正数原码、反码、补码相同,移码是补码的符号位取反。其他的按照上面的方式求。【注意,不只是正数,还有0】
    在这里插入图片描述

  2. 原码、反码、补码既能表示定点整数也能表示定点小数,而移码只能表示定点整数

  3. 移码是整体数值平移,而其首尾两端即边界(补码的表示范围):全0表示最小真值-2^n, 全1表示最大真值2^n - 1

  4. 题目中.表示小数,比如1.101 = -0625表示整数,比如1, 101 = -5

  5. 小数也符合这个规则
    在这里插入图片描述

  6. 一定不要忘记转补码
    在这里插入图片描述

在这里插入图片描述
练习:
在这里插入图片描述

注意:

  • 一个考点
    在这里插入图片描述
  1. 补码与原码转换—利用小技巧分两种情况讨论
    1. 补码后面全0
    2. 补码后面至少一个1
  2. X < 负数时,需要注意补码特殊情况---全0。对于X > 负数不需要注意

2.1.2 定点数的运算

2.1.2.1 移位运算

2.1.2.1.1 算术移位(符号位不参与移位)

**算术移位是对有符号数进行移位,符号位不参与运算。在这里插入图片描述

注意:

  1. 上表是为负数的情况。对于正数:移位、扩展都是补0,从而保持原码、反码、补码相同。
  2. 如果题目只是说机器码,并没有说是原码、反码、还是补码。则默认为补码
  3. 算术左移的条件(补码):最高有效位与原符号位相同。否则会出现严重误差。
  4. 双符号判断移位的溢出当符号位与最高位不相等时,左移会溢出
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.1.2.1.2 逻辑移位(符号位参与移位)

逻辑移位,等价于对无符号数的移位。
在这里插入图片描述

2.1.2.1.3 循环移位(符号位参与移位)
* 循环移位分类
	1. 带进位标志位CF的循环移位
	2. 不带带进位标志位CF的循环移位

在这里插入图片描述

注意:CF在高位的前面
在这里插入图片描述

2.1.2.2 加减运算

2.1.2.2.1 补码的加减

在这里插入图片描述

注意:无论是无符号数还是有符号数,其减法加法,转加法的规则如下:
在这里插入图片描述

  • 例题:
    1. 无符号数减法
      在这里插入图片描述
    2. 符号数减法:
      在这里插入图片描述
2.1.2.2.2 溢出的判断

那么如何判断加减后是否溢出?
在这里插入图片描述

注意:

  1. 采用双符号位时,即采用模4补码 = 变形码时,模4补码存储时只需要一个符号位【因为肯定合法】,而在计算加减时可能溢出,在乘除的时候是ALU自动处理,而不需要模4补码。所以模4补码是用来检测加减的溢出,不检查乘除
    在这里插入图片描述
  2. 溢出的几个等价说法:
    1. 双符号位不同
    2. 加法器两个输入端相同,且不同于输出端
    3. 符号位和最高数位的进位不同
  3. 双符号位时,左边表示本应该得到的,右边是实际的
    在这里插入图片描述
  4. 双符号数算术左移时,只有低符号位参与移位,高符号位不参与移位
    在这里插入图片描述
2.1.2.2.3 空间扩展的填充的数值

那么出现溢出后应该将空间扩展,比如1B变为2B。如何扩展?
在这里插入图片描述

注意:2B变为1B是直接截取。

在这里插入图片描述
在这里插入图片描述

注意:无符号就是不看符号二进制数。这里的short是补码,故需要先转补码

在这里插入图片描述

2.1.2.3 乘法运算

2.1.2.3.1 原码的一位乘

在这里插入图片描述

注意:

  1. 初始值为0拼上乘数
  2. 重复+
  3. 加完n次后,再右移一次,因为第一次没有移位
  4. 截取2*n
2.1.2.3.2 补码的一位乘

补码一位乘和原码一位乘非常类似,只需要注意如下几个区别就行:
在这里插入图片描述

在这里插入图片描述

注意:

  1. 符号位参与运算,故为0拼接带符号的乘数辅助位为0
  2. 辅助位 - MQ最低位判断加减 —–> 移位
  3. 多加一次,但不移位。(因为符号位参与了运算)
  4. 截取结果2*n
2.1.2.3.3 小结

在这里插入图片描述

注意:原码和补码一位乘的积有2N+1位【要加上1位符号位】
在这里插入图片描述

2.1.2.4 除法运算

在这里插入图片描述

注意:

  1. 不恢复余数法中,异号相除时,够减商0, 不够减商1
  2. 原码的乘/除符号位都不参与运算,而补码的都参与运算。
    在这里插入图片描述
  3. 无论是原码还是补码,其乘除都是移位N次。需要注意其加减次数。

2.1.3 数据的存储与排列

数据的存储有两种模式:

  1. 大端模式:低位字节存放在高地址处
  2. 小端模式:低位字节存放在低地址处
  • 例题:
    在这里插入图片描述
    在这里插入图片描述

数据在计算机的排列方式有两种:边界对齐和边界不对齐。
在这里插入图片描述

注意:

  1. 边界不对齐方式在访问一个字或者半字的时候可能需要访问两次存储体
  2. 边界对齐:所有变量的起始地址都能够被自身长度所整除。
    在这里插入图片描述

2.3 浮点数的表示与运算

2.3.1 浮点数的表示

2.3.1.1 浮点数格式

在这里插入图片描述

注意:

  1. 采用浮点数目的:在位数不变的情况下,扩大数的表示范围
  2. 如果总的位数不变,我们将尾数的位数变小,阶码的位数相应的会变大,则数的表示范围会变大,但是数的精度会降低。
  3. 基数:指几进制数。

2.3.1.2 浮点数的规格化

  • 采用浮点数:为了增加数的表示范围
  • 采用规格化浮点数:为了增加数据的精度。【本来要舍弃的1,在规格化后被保留了】

在这里插入图片描述

规定:

  • 尾数原码时,最高数位一定为1
    若基数为4时,前两位数至少有一个为1;若基数为8时,前三位数至少有一个为1
  • 尾数补码时,符号位与最高数位一定相反
    若基数为4时,前两位数至少有一个与符号位相反;若基数为8时,前三位数至少有一个与符号位相反
  • 例题:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3.2 浮点数标准(IEEE754)

在这里插入图片描述

注意:

  • IEEE754标准阶码采用移码,且其偏移量为2^(n-1) - 1
    • 结果导致全1由最大变成了最小的数,其他的顺序保持不变。
    • 全0全1有特殊用途,故1<=E<=254
      • 尾数全0,阶数全1时:表示无穷大
      • 尾数全0,阶数全0时:表示0

IEEE754标准:
在这里插入图片描述

注意:

  1. IEEE754阶数用移码[注意:偏移量不同],尾数用原码[注意:1隐藏表示]
  2. 上面计算浮点数的真值的公式是针对于规格化的浮点数,才这样计算。

在这里插入图片描述

在这里插入图片描述

  • 例题:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

2.3.3 浮点数的运算

2.3.3.1 浮点数的加减运算

浮点数的加减运算步骤:

  1. 对阶:阶数的向阶数的对齐。【注意阶码-1时同时将尾数算术右移1位,可能舍入
  2. 尾数加减:注意是用补码加减(采用双符号位)【如果不是补码可以先转补码,算完后再转回来,比如IEEE754标准就需要这样处理】
  3. 规格化:和平常的浮点数规格化一样。【多次左规】
    如果加减后尾数的符号位不一样,表示溢出,但是此时的溢出是可以挽救的,需要右规,且符号位改为本应该得到的那一位。【只需要右规一次
    1. 如果加减后得到01.xxxx, 则为00.1xxxx
    2. 如果加减后得到10.xxxx, 则为11.0xxxx
  4. 舍入有恒置“1”法 和 “0”舍”1″入法 两种
  5. 判断溢出:由阶码的符号决定,如果阶码的双符号位不同,则表示溢出。
    1. 01时,即阶码大于最大阶码,表示上溢,进入中断
    2. 10时,即阶码小于最大阶码,表示下溢,按机器0处理

注意:

  1. 左规:当浮点数运算的结果为非规格化时,要进行规格化处理,将尾数算术左移一位,阶码减1。【左规可能要进行多次】
  2. 右规:当浮点数运算的结果尾数溢出(双符号位不同时),将低位符号位和尾数一起算术右移1位,然后低位符号位补高位符号位的数,再阶码加1。【右归只需要进行一次】
  3. 关于舍入的详细阐述:
    在这里插入图片描述
  4. 舍入是浮点数特有的,整数没有。浮点数的舍入有两种情况:
    1. 对阶时
    2. 右规格化
      在这里插入图片描述

在这里插入图片描述

  • 例题:
    在这里插入图片描述
    在这里插入图片描述

2.3.3.2 (C语言)浮点数强制类型转换

在这里插入图片描述
在这里插入图片描述

  • 例题
    在这里插入图片描述

3. 算术逻辑单元(ALU)

记住几个知识点:

  • 并行加法器中,每位和除了与本位相加的二进制数外,还与低位送来的进位有关
  • 采用并行加法器目的:加快运算速度
  • ALU属于组合逻辑电路, 其基本部件是并行加法器
  • 在串行加法器中,影响运算速度的是进位传递速度
  • 4个74181(4位)配1个74182(4位) 组成 一个两级先行结构的16位ALU
    在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/84565.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!