C程序中涉及的算法
(1) 按位运算:符号|按位OR运算;符号&按位AND运算;符号~表示按位NOT运算;符号^按位XOR运算。
实现掩码操作:通过与给定的一个位模式进行按位与,可以提取所需要的位,对这些位进行“置1” “清0”等。
(2) 逻辑运算:符号||按位OR运算;符号&&表示AND运算;符号!表示NOT运算。
(3) 移位运算
- 逻辑移位:不考虑符号位,把高(低)位移出,低(高)补0.
- 算术移位:机器码采用有符号数,符号位不参与移位。
- 原码左移、右移都补0,原码算术移位:左移丢1,运算出错,右移丢1,影响精度。
- 正数中,原码,补码,反码左右移都补0,负数中,原码左右移补0,补码左移补0、右移补1,反码左右移补1。
(4)位扩展和位截断运算 - 0扩展:用于无符号数,在短的无符号数前添加足够的0。
- 符号扩展:用于补码表示的带符号整数,在短的带符号整数前添加足够多的符号位
基本运算部件
(1)串行进位加法器
- 只有一个全加器,数据逐位串行送入加法器中进行运算,进位触发器用来寄存进位信号,便于下次运算。
- 操作数长n位,加法就要分n次进行,每次产生一位和,并且串行逐位地送回寄存器。
- 把n个全加器串接起来,可以进行两个n位数的相加。
- 串行进位(行波进位),每一级进位直接依赖于前一级的进位,所以进位信号是逐级形成。
- 最长运算时间主要是由进位信号的传递时间决定的,位数越多延迟时间就越长。
(2)并行进位加法器
- 先行进位(同时进位):各级进位信号同时形成。
- 加快进位产生和提高传递的速度,即将各级低位产生的本级G和P信号依次同时送到高位各全加器的输入,以使它们同时形成进位信号。
(3)带标志加法器 - n位无符号加法器只能用于两个n位二进制数相加,不能进行减运算,也不能进行带带符号整数的加减运算。