Menu Close

第七节 2进制数运算

既然引进2进制数,那么必然要探讨2进制数的运算。一般2进制数会有一位2进制数之间的运算,也有多位2进制数之间的运算。一位2进制数又分为逻辑、算数、关系等运算。在学习10进制数运算时我们已经非常清楚算术和关系运算,如10+9=19 是算术运算,

9>8 就是关系运算。还有一类运算虽然没有明确提出,但大家都在自觉使用,这就是逻辑运算。比如老师给学生批改作业,总会给出对与错两种答案,对与错就是逻辑的两种状态。再有9>8,对不对呢?答案是肯定的–“对”,对就是逻辑的一种结果。8>9 对吗?答案是否定的,错(不对),其中,错也是逻辑的一种。所以逻辑值一般表示相互对立的两种状态,如对、错,真、假,前、后,左、右,开、关,闭合、断开等。由于2进制数的每个数码也只有0,1两个状态,因此数字系统中利用2进制的0,1来表示逻辑状态,如0表示错,1表示对;0表示关,1表示开等。在数字系统中就以0,1表示逻辑值。有了逻辑值,也会有逻辑运算。下面就2进制的逻辑,算数和关系运算分别进行介绍。

1. 2进制数的逻辑运算

逻辑运算的概念:逻辑运算是数字符号化的逻辑推演法,包括联合、相交、相减等运算,是针对逻辑状态的处理过程。在数字系统中也称为布尔运算,其基本运算符有与,或,非三种,扩展的运算符有与非,或非、异或、异或非(也称为同或)等。

  • 逻辑与运算

例1: 描述电动机的转动状态,条件: 电源是否供电,开关是否合上,结果:电动机转动状态,转或不转。描述状态如表1.

表1

电源 开关 电机状态
非供电 打开
非供电 闭合
供电 打开
供电 闭合

从表1中的描述可以看出,电源的供电状态就是逻辑值,开关的闭合是逻辑值,电机状态也是逻辑值。但电机状态的结果明显和前两个逻辑值发生了关系。即电源和开关必须同满足电源供电,开关闭合,电机才会转动,否则不会转动(停)。像这种必须同时满足条件的运算关系称为逻辑与运算,用符号 “•”或 & 表示。可以写成 : 电机转动状态=电源 &开关=电源•开关。如果以2进制数0表示非供电,1表示供电;以0表示开关打开,1表示开关闭合;以0表示电机停,1表示电机转。表一也可以用表2的方式表示。

表2

电源 开关 电机状态
0 0 0
0 1 0
1 0 0
1 1 1

因此,2进制的与(& , •)运算可以简单描述如下:

0 & 0 =0;    0 • 0=0;

0 & 1 =0;    0 • 1 =0;

1 & 0 =0;    1 • 0 =0;

1 & 1  =1;    1 • 1  =1;

注: “•” 表示与运算只在数字电路课程中使用,而且只在一位2进制或逻辑代数中使用。与”&” 符号在Verilog程序设计、计算机语言中使用广泛。

  • 逻辑或运算

例2:如图1所示,开关A,B控制灯泡Y的供电。列表描述开关状态与灯泡状态之间的关系。

%title插图%num

图1

 

开关状态与灯泡状态之间的关系如表3所示,

表3

A B Y

从表3的描述可以看出:开关A,B只要至少有一个满足闭合条件,灯泡就会点亮。像这种必须至少有一个满足条件的运算关系称为逻辑或运算,用符号” +”或” | “表示。

如果以0表示开关A,B断开,用1表示开关A,B的闭合, 用0表示Y的灭,用1表示Y的亮, 表3可以用表4表示。

表4

A B Y
0 0 0
0 1 1
1 0 1
1 1 1

2进制的或运算描述如下:

0  | 0 =0;  0+0=0;

0 | 1 = 1;  0+1 =1;

1 | 0= 1;  1+0 =1;

1 | 1 =1;   1+1 =1;

注: “+” 表示或运算只在数字电路课程中使用,而且只在一位2进制或逻辑代数中使用。或”|” 符号在Verilog程序设计,计算机语言中使用广泛。

  • 逻辑非运算

%title插图%num

 图2

如图2所示,灯泡Y的亮与灭的逻辑状态与开关A的闭合与打开正好形成相反的关系。如表5

表5

A Y

A, Y的关系也可以用0,1 描述,如表6

表6

A Y
0 1
1 0

这种描述相反逻辑关系的运算,称为非运算,用“!”或“~ ”或“¯”表示。

2进制的非运算描述如下:

!0= 1;  ~0=1;

!1= 0;  ~1  =0;

%title插图%num

  • 逻辑异或运算

异或的定义如下:A,B为条件,Y为输出状态。Y=A⊕B。只有A、B 的值不同时,Y的输出才为真,这种逻辑关系称为异或。 异或的逻辑关系描述如表7

表7

A B Y
0 0 0
0 1 1
1 0 1
1 1 0

2.  2进制数的算术运算

  • 一位2进制数之间的运算定义如下:

(1)加法:0+0=0,0+1=1,1+0=1,1+1=(1)0,

(2)减法:0-0=0,1-0=1,1-1=0, 0-1= (0)1 (or( 1)1) (向前借位),

(3)乘法:0 x 0=0, 0 x 1=0 ,1 x 0=0,1 x 1=1,

 

 如果不考虑进位与借位,加法的结果与逻辑异或的结果相同,减法的结果也与异或相同,这种运算也称为模2运算,一般称模2加或模2减。乘法的结果与逻辑与的结果相同。

(4)多项扩展(以三项为例)

 

(1)加法:0+0+0=0,0+0+1=1,  0+1+0=1,0+1+1=(1)0,1+0+0=0, 1+0+1=0, 1+1+0=0, 1+1+1= 1,

(2)减法:0-0-0 =0,0 -0 -1 = 1,    0- 1- 0=1,0- 1- 1=0,     1- 0 – 0=1 ,1 -0 – 1=0,    1- 1- 0 =0,   1- 1 -1=1,

(3)乘法:0 x 0 x 0=0,0 x 0 x 1=0 ,0 x 1 x 0=0,0 x 1 x 1=0,1 x 0 x 0 =0, 1 x 0 x 1=0 ,  1 x 1 x 0=0, 1 x 1 x 1=1;

  •  *多位2进制数之间的运算

多位二进制数可以进行基本的四则运算有加法,减法,乘法,除法(除数!=0)。 其它的还有幂,开方,对数等各种运算。这里对仅对二进制的加、减、乘进行简单说明,并举例说明。更详细、更复杂的将在逻辑代数以及后续课程Verilog, System Verilog 的课程中介绍。

    • 无符号数

      •  多位无符号2进制数加法运算

多位二进制加法与一位2进制加法运算不同,多位2进制加法在计算时会产生从低位到高位的进位。但需记住如下几点,然后采用竖式还是很方便计算的,

        •   2进制的基为2,因此每位码字只能·是0或1,
        •  2进制的权值为2n, 不同权值对应的位不能相加,
        • 相同权值对应位运算时逢2进1, 如  1 +1 +1 会产生进位, 1+1+1 等效为  1+ 10  =>  01+10  => 11,
        • 不同位数的2进制相加时,将位数少的2进制数左边补零,使二者位数对齐,如例1所示。
        • 无符号数加法引起的进位扩展,应扩展相应的位数,以便保持正确的结果。

例1: 求 (111)2 + (1101)2 ?  用10进制验算计算结果。

                      计算结果如图3所示:

%title插图%num

图3   4位无符号数加法

                    从图3的运算结果可以看出,运算结果由原数据的4位扩展到5位。

    • 多位无符号2进制数减法运算

多位二进制减法与一位2进制减法运算不同,多位2进制减法在计算时会产生从低位向高位的借位。但需记住如下几点,然后采用竖式还是很方便计算的,

        •   2进制的基为2,因此每位码字只能·是0或1,
        •  2进制的权值为2n, 不同权值对应的位不能相减,
        • 相同权值对应位运算产生借位时,借1当2,
        • 不同位数的2进制相减时,将位数少的2进制数左边补零,使二者位数对齐,如例1所示。
        • 无符号数减法引起的进位扩展,应扩展相应的位数,以便保持正确的结果。

例2: 求无符号数 (0111)2 – (1101)2 ,结果用无符号表达?  用10进制验算计算结果。

%title插图%num图4

 

计算结果如图4所示:由于10进制的无符号数中没有规定负数集,因此不能用10进制的无符号数校验计算结果小于0的值。2进制的结果是保留11010 还是1010一般根据具体需求而定。如果该计算的结果作为中间结果存在,则应保留最高借位位,此时结果为11010. 如 (111)2 + (1101)2 +(110)2 = (11010)2+(00110)2=(00000)2 结果是正确的,但如果 (111)2 + (1101)2 只保留4位(1010)2,再次运算(1010)2+(110)2 = (1010)2+(0110)2=(10000)2  ,可以看出(10000)2  这个结果对于无符号数与0是不同的。

 

    • 有符号数

      • 有符号数加法,减法

对于有符号数来说,加、减运算是一致的,因为减法运算可以变成加补码的形式。计算步骤如下:

        • 将参与运算的2进制数据变成2的补码,
        • 扩展到适当位数,注意符号位的扩展
          • 正数及0,左边补零
          • 负数左边补1
        • 加运算,并扩展符号位
        • 计算结果仍保留2的补码的形式

例3: 求有符号数 (0111)2 – (1101)2 ,结果用有符号表达?  用10进制验算计算结果。

                     (1)利用减法竖式计算

                            %title插图%num

                                       图5  有符号数运算

 

计算结果为(11010)2 为十进制的-6,与十进制数的验算结果一致。由于结果为有符号数,因此(11010)2与(1010)2是等效的,因为再此参与运算时,有符号数(1010)2可以根据需要扩展符号位。

(2)利用补码计算

(1101)2的补码为(0011)2  因此上式的计算也可以如图6所示,

%title插图%num

图6

3. 其它运算

2进制的其它运算还有关系运算,模2运算等会在后续课程的逻辑代数以及Verilog、System Verilog中的相关课程中讲解。

 

 

 

 

 

Posted in IC, 教材与教案, 数字电路基础, 数字电路基础, 文章

发表回复

相关链接