文章目录
1. 数制与编码
1.1 进制转换
注意:
- 比如
1 / 2
- 真值:符号表示正负,如“+5”。
机器数:机器中的数,0和1表示正负,如“0,101”
机器码
:指数在电脑中存放值,为补码
。若指名为无符号数,则按无符号数。- 2^16 – 1 = 65535
1.2 BCD码
采用四位二进制数表示十进制数, 故有6种情况浪费了。
1.3 字符与字符串
1.4 校验码
1.4.1 奇偶校验(1位检错,不能纠错)
注意:
- 一种编码方式的
码距
很重要,用来衡量该方案是否有纠错能力。- 无论是什么校验,我们
默认校验位是不发生跳变
的。【做题的时候特别注意】所以一位奇偶校验在检测一位数是100%能检测出错误。
1.4.2 海明码(2位检错,1位纠错)
上述的海明码还不是实际的海明码,因为其只有一位检错的能力,实际上,海明码具有一位纠错,二位检错能力。是因为在其最高位还添加了一个校验位。如下图所示:
1.6 循环冗余码CRC(只能检错,纠错1位或多位由多项式决定)
注意:
- 在大量数据传送过程中,通常使用CRC校验,其比奇偶校验或者海明码可靠。实际上网络中的数据传输使用的就是CRC
- 检测时,若余数为
非0
,则表示出错。同时,若按约定的多项式G(x)得到的校验位k满足2^k >= n + k + 1
,则有一位纠错能力。
- 在CRC中,接收端检测出错误后,有如下三种纠错方法:
- 请求重发
- 删除数据(触发自动触发)
- 通过余数值自行纠正
- CRC校验可以通过硬件完成。
2. 数的表示与运算
* 数的分类
1. 按小数点的位置分
1. 定点数:平时写的小数,如 6.3
2. 浮点数:科学计数法表示的小数,如 3.14×10^6
2. 按符号分
1. 无符号数
* 注意:通常只有无符号整数,没有无符号小数。
2. 有符号数
2.1 定点数的表示与运算
2.1.1 定点数的表示
无符号定点数很简单,这里不做说明。下面讨论有符号定点数的格式:
2.1.1.1 有符号定点数格式
注意:
- 定点整数和定点小数的默认小数点位置不一样。
- 有符号定点数的整数和小数部分是分开存放的,比如
19.12
,会分成19
和.12
分别单独存放。
2.1.1.2 数值的表示(原码、反码、补码、移码)
- 原码:真值的绝对值
- 反码:在原码的基础上,符号位不变,数值部分全部取反
- 补码:在反码的基础上+1
- 移码:在
补码
的基础上,将符号位取反。(为了方便比较数的大小)
注意:
0
和正数
的原码、反码、补码相同
,移码是补码
的符号位取反。其他的按照上面的方式求。【注意,不只是正数,还有0】
原码、反码、补码既能表示
定点整数
也能表示定点小数
,而移码只能表示定点整数
。移码是整体数值平移,而其首尾两端即边界(补码的表示范围):
全0表示最小真值-2^n, 全1表示最大真值2^n - 1
题目中
.
表示小数,比如1.101 = -0625
;,
表示整数,比如1, 101 = -5
小数也符合这个规则
:
一定不要忘记转补码
练习:
注意:
- 一个考点
- 补码与原码转换—利用小技巧分两种情况讨论
- 补码
后面全0
- 补码
后面至少一个1
X < 负数
时,需要注意补码特殊情况---全0
。对于X > 负数
不需要注意
2.1.2 定点数的运算
2.1.2.1 移位运算
2.1.2.1.1 算术移位(符号位不参与移位)
**算术移位是对有符号数进行移位,符号位不参与运算。
注意:
上表是为负数的情况。
对于正数:移位、扩展都是补0
,从而保持原码、反码、补码相同。- 如果题目只是说机器码,并没有说是原码、反码、还是补码。则
默认为补码
。- 算术左移的条件(补码):最高有效位与原符号位相同。否则会出现严重误差。
- 用
双符号
来判断移位的溢出
:当符号位与最高位不相等时,左移会溢出
2.1.2.1.2 逻辑移位(符号位参与移位)
逻辑移位,等价于对无符号数的移位。
2.1.2.1.3 循环移位(符号位参与移位)
* 循环移位分类
1. 带进位标志位CF的循环移位
2. 不带带进位标志位CF的循环移位
注意:CF在高位的前面
2.1.2.2 加减运算
2.1.2.2.1 补码的加减
注意:无论是
无符号数
还是有符号数
,其减法
都转
为加法
,转加法的规则如下:
- 例题:
- 无符号数减法
- 符号数减法:
2.1.2.2.2 溢出的判断
那么如何判断加减后是否溢出?
注意:
- 采用双符号位时,即采用
模4补码 = 变形码
时,模4补码存储时
只需要一个符号位【因为肯定合法】,而在计算加减时可能溢出,在乘除的时候是ALU自动处理,而不需要模4补码。所以模4补码
是用来检测加减
的溢出,不检查乘除
。
- 溢出的几个等价说法:
- 双符号位不同
- 加法器两个输入端相同,且不同于输出端
- 符号位和最高数位的进位不同
- 双符号位时,左边表示本应该得到的,右边是实际的
- 双符号数算术左移时,只有低符号位参与移位,高符号位不参与移位
2.1.2.2.3 空间扩展的填充的数值
那么出现溢出后应该将空间扩展,比如1B
变为2B
。如何扩展?
注意:
2B
变为1B
是直接截取。
注意:无符号就是不看符号二进制数。这里的short是补码,故需要先转补码
2.1.2.3 乘法运算
2.1.2.3.1 原码的一位乘
注意:
- 初始值为
0拼上乘数
- 重复
+
、移
- 加完n次后,
再右移一次,因为第一次没有移位
- 截取
2*n
位
2.1.2.3.2 补码的一位乘
补码一位乘和原码一位乘非常类似,只需要注意如下几个区别就行:
注意:
- 符号位参与运算,故为
0拼接带符号的乘数
,辅助位为0
辅助位 - MQ
最低位判断加减 —–> 移位- 多加一次,但不移位。(因为符号位参与了运算)
- 截取结果
2*n
位
2.1.2.3.3 小结
注意:原码和补码一位乘的积有
2N+1
位【要加上1位符号位】
2.1.2.4 除法运算
注意:
- 不恢复余数法中,
异号相除时
,够减商0
, 不够减商1
- 原码的乘/除符号位都不参与运算,而补码的都参与运算。
- 无论是原码还是补码,其乘除都是移位N次。需要注意其加减次数。
2.1.3 数据的存储与排列
数据的存储有两种模式:
- 大端模式:低位字节存放在高地址处
- 小端模式:低位字节存放在低地址处
- 例题:
、
数据在计算机的排列方式有两种:边界对齐和边界不对齐。
注意:
- 边界不对齐方式在访问
一个字或者半字
的时候可能需要访问两次存储体
- 边界对齐:所有变量的起始地址都能够被自身长度所整除。
2.3 浮点数的表示与运算
2.3.1 浮点数的表示
2.3.1.1 浮点数格式
注意:
- 采用浮点数目的:在位数不变的情况下,扩大数的表示范围
- 如果总的位数不变,我们将尾数的位数变小,阶码的位数相应的会变大,则数的表示范围会变大,但是数的精度会降低。
基数
:指几进制数。
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标准:
注意:
IEEE754
阶数用移码[注意:偏移量不同]
,尾数用原码[注意:1隐藏表示]
。- 上面计算浮点数的真值的公式是针对于规格化的浮点数,才这样计算。
- 例题:
2.3.3 浮点数的运算
2.3.3.1 浮点数的加减运算
浮点数的加减运算步骤:
- 对阶:阶数
小
的向阶数大
的对齐。【注意阶码-1时同时将尾数算术右移1位,可能舍入
】 - 尾数加减:注意是用
补码加减(采用双符号位)
【如果不是补码可以先转补码,算完后再转回来,比如IEEE754
标准就需要这样处理】 - 规格化:和平常的浮点数规格化一样。【多次左规】
如果加减后尾数的符号位不一样,表示溢出,但是此时的溢出是可以挽救的,需要右规
,且符号位改为本应该得到的那一位。【只需要右规一次】- 如果加减后得到
01.xxxx
, 则为00.1xxxx
- 如果加减后得到
10.xxxx
, 则为11.0xxxx
- 如果加减后得到
- 舍入:有恒置“1”法 和 “0”舍”1″入法 两种
- 判断溢出:由
阶码
的符号决定,如果阶码的双符号位不同,则表示溢出。- 为
01
时,即阶码大于最大阶码,表示上溢,进入中断。 - 为
10
时,即阶码小于最大阶码,表示下溢,按机器0处理。
- 为
注意:
- 左规:当浮点数运算的结果为非规格化时,要进行规格化处理,将尾数算术左移一位,阶码减1。【左规可能要进行多次】
- 右规:当浮点数运算的结果尾数溢出(双符号位不同时),将低位符号位和尾数一起算术右移1位,然后低位符号位补高位符号位的数,再阶码加1。【右归只需要进行一次】
- 关于舍入的详细阐述:
- 舍入是浮点数特有的,整数没有。浮点数的舍入有两种情况:
- 对阶时
- 右规格化
- 例题:
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