运算电路基础
数字逻辑电路基础
运算电路基础
关于0和1的一套数学运算体系称为布尔代数。
真值表:反映输入和输出之间的关系。异或运算。
一位逻辑门电路
组合逻辑部件
组合逻辑电路:没有存储功能,其输出紧依赖于当前输入
时序逻辑电路:具有存储功能,其输出不仅依赖于当前输入,还依赖于存储单元的当前状态
可以利用基本逻辑门电路构成一些具有特定功能的组合逻辑部件(功能部件)如译码器、编码器、多路选择器、加法器等
实现一个功能部件的过程
- 用一个真值表描述功能部件的输入和输出之间的关系
- 根据真值表确定逻辑表达式
- 根据逻辑表达式实现逻辑电路
多路选择器
数字逻辑电路基础
一位加法器(全加器)
加法由逻辑部件实现,而其他所有算术运算部件都基于加法器和逻辑运算实现,
因此,所有算术运算是基于0和1以及逻辑运算实现的。
n位加法器实现的是n位无符号的加运算
输入包括一位低位进位Cin和两个n位的加数A、B
所有算术运算部件都是基于n位加法器构成
n位带标志加法器
n位整数加/减运算器
算术逻辑部件(ALU)
从C语言表达式到逻辑电路
C语言支持的基本数据类型
从C表达式到运算类指令
基本数据类型
-
无符号数(二进制位串)、带符号整数(补码)
-
浮点数(IEEE 754标准)
-
位串、字符(串)(ASCII码)
基本运算类型 -
算术(+ - * / > == !=)
-
按位(| & ~ ^)
-
逻辑(|| && !)
-
移位(<< >>)
-
扩展和截断
从运算类指令到运算电路
C语言中各类运算
算术运算
按位运算
逻辑运算
移位运算
截断和扩展运算
整数加减运算
补码加减运算器
- 指针、地址等通常被说明为无符号整数,因而在进行指针或地址运算时,需要进行无符号整数的加、减运算
- 无符号整数和带符号整数的加、减运算电路完全一样,这个运算电路称为整数加减运算部件,基于带标志加法器实现
- 计算机中的加法器,因为只有n位,所以是一种模2^n运算系统。
带符号溢出:最高位和次高位的进位不同;和的符号位和加数的符号位不同
无符号减溢出:差为负数,即借位CF=1
20
做减法以比较大小,规则:
Unsigned:CF=0,大于
Signed:OF=SF时,大于
无符号整数加法溢出判断程序
带符号整数加法溢出判断程序
当两个符号相同的数相加,结果的符号与之相反,则OF=1,否则OF=0. 2.当两个符号不同的数相减,结果的符号与减数相同,则OF=1,否则OF=0.
/*
无符号整数加法溢出判断程序
发生溢出时,一定满足result < x and result < y
否则,若x+y-2^n >= x, 则y >= 2^n,这是不可能的
*/
int uadd_ok(unsigned x, unsigned y)
{
unsigned sum = x + y;
return sum >= x;
}
/*
带符号整数加法溢出判断程序
*/
int tadd_ok(int x, int y)
{
int sum = x + y;
int neg_over = x < 0 && y < 0 && sum >=0 //相减小于-256
int pos_over = x >= 0 && y >= 0 && sum < 0; //两个数相加小于256
return !neg_over && !pos_over
}