购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 二进制数的算术运算和逻辑运算

1.3.1 二进制数的算术运算

二进制数的算术运算规则非常简单,其具体运算规则如下。

1.加法运算规则

二进制加法规则是:0+0=0,0+1=1,1+0=1,1+1=10(“逢二进一”)。

例1.8

2.减法运算规则

二进制减法规则是:0-0=0,1-0=1,1-1=0,0-1=1(“借一当二”)。

例1.9

3.乘法运算规则

二进制乘法规则是:0×0=0,0×1=0,1×0=0,1×1=1。

例1.10 】 1011×1010=1101110

从这个例子中可以看出,在二进制乘法运算时,若相应的乘数位为1,则把被乘数照写一遍,只是它的最后一位应与相应的乘数位对齐(这实际上是一种移位操作);若相应的乘数位为0,则部分积各位均为0;当所有的乘数位都乘过之后,再把各部分积相加,便得到最后乘积。所以,实质上二进制数的乘法运算可以归结为“加”(加被乘数)和“移位”两种操作。

4.除法运算规则

二进制数的除法是乘法的逆运算,这与十进制数的除法是乘法的逆运算一样。因此利用二进制数的乘法及减法规则可以容易地实现二进制数的除法运算。

例1.11 】 110110÷1010=101……100

1.3.2 二进制数的逻辑运算

数字系统与计算机中能够实现的另一种基本运算是逻辑运算。逻辑运算与算术运算有着本质上的差别,它是按位进行的,其运算的对象及运算结果只能是0和1这样的逻辑量。这里的0和1并不具有数值大小的意义,而仅仅具有如“真”和“假”、“是”和“非”这样的逻辑意义。二进制数的逻辑运算实际上是将二进制数的每一位都看成逻辑量时进行的运算。

基本的逻辑运算有逻辑“或”、逻辑“与”和逻辑“非”3种,常用的还有逻辑“异或”运算。下面分别予以说明。

1.逻辑“或”

逻辑“或”也称逻辑加,其运算规则是:两个逻辑量中只要有一个为1,其运算结果就为1;只有当两个逻辑量全为0时,其运算结果才为0,可简述为“有1得1,全0得0”。逻辑“或”的运算符号为“∨”或“+”。如下所示:

0∨0=0 0∨1=1 1∨0=1 1∨1=1

也可表示为

0+0=0 0+1=1 1+0=1 1+1=1

例1.12 】 0110 ∨ 0001=0111

逻辑“或”运算常用于将一个已知二进制数的某一位或某几位置1,而其余各位保持不变。例如,欲使二进制数10101100的最低一位置1,而其余各位不变,就可用00000001与之相“或”来实现。即

2.逻辑“与”

逻辑“与”也称逻辑乘,其运算规则是:两个逻辑量中只要有一个为0,其运算结果就为0;只有当两个逻辑量全为1时,其运算结果才为1。可简述为“有0得0,全1得1”。逻辑“与”的运算符号为“∧”或“×”。如下所示:

0∧0=0 0∧1=0 1∧0=0 1∧1=1

也可表示为

0×0=0 0×1=0 1×0=0 1×1=1

例1.13 】 1001×1110=1000

逻辑“与”运算常用于将一个已知二进制数的某一位或某几位置0,而其余各位保持不变。例如,欲使二进制数01010011的最低两位置0,而其余各位保持不变,就可用11111100与之相“与”来实现。即

3.逻辑“非”

逻辑“非”也称逻辑反,其运算规则是:1“非”为0,0“非”为1。其运算符号为“—”或“¬”。如下所示:

例1.14 】 ¬1001=0110

4.逻辑“异或”

逻辑“异或”又称模2加,其运算规则是:0和任何数相“异或”该数不变,1和任何数相“异或”该数变反。可简述为“相同得0,不同得1”。其运算符号为“∀”或“⊕”。如下所示:

也可表示为

例1.15 】 0110 ∀ 1001=1111

逻辑“异或”运算常用于将一个已知二进制数的某些位变反而其余各位不变。例如,欲使10101100的最低两位变反而其余各位不变,就可以用00000011与之进行“异或”运算来完现。即

1.3.3 移位运算

移位运算是二进制数的又一种基本运算。计算机指令系统中都设置有各种移位指令。移位分为逻辑移位和算术移位两大类。

1.逻辑移位

所谓逻辑移位,通常是把操作数当成纯逻辑代码,没有数值含义,因此没有符号与数值变化的概念;操作数也可能是一组无符号的数值代码(即无符号数),通过逻辑移位对其进行判别或某种加工。逻辑移位可分为逻辑左移、逻辑右移、循环左移和循环右移。

逻辑左移是将操作数的所有位同时左移,最高位移出原操作数之外,最低位补0。逻辑左移一位相当于将无符号数乘以2。例如,将01100101逻辑左移一位后变成11001010,相当于(101) 10 ×2=202。

逻辑右移是将操作数的所有位同时右移,最低位移出原操作数之外,最高位补0。逻辑右移一位相当于将无符号数除以2。例如,将10010100逻辑右移一位后变成01001010,相当于148÷2=74。

循环左移就是将操作数的所有位同时左移,并将移出的最高位送到最低位。循环左移的结果不会丢失被移动的数据位。例如,将10010100循环左移一位后变成00101001。

循环右移就是将操作数的所有位同时右移,并将移出的最低位送到最高位。它也不会丢失被移动的数据位。例如,将10010100循环右移一位后变成01001010。

2.算术移位

算术移位是把操作数当作带符号数进行移位,所以在算术移位中,必须保持符号位不变,例如一个正数在移位后还应该是正数。如果由于移位操作使符号位发生了改变(由1变0,或由0变1),则应通过专门的方法指示出错信息(如将“溢出”标志位置1)。

与逻辑移位类似,算术移位可分为算术左移、算术右移、循环左移和循环右移。

算术左移的移位方法与逻辑左移相同,就是将操作数的所有位同时左移,最高位移出原操作数之外,最低位补0。算术左移一位相当于将带符号数(补码)乘以2。例如,将11000101算术左移一位后变成10001010,相当于(-59)×2=-118,未溢出,结果正确。

算术右移是将操作数的所有位同时右移,最低位移出原操作数之外,最高位不变。算术右移一位相当于将带符号数(补码)除以2。例如,将10111010算术右移一位变成11011101,相当于(-70)÷2=-35,未溢出,结果正确。

循环左移和循环右移的操作与前述逻辑移位时的情况相同,都是不丢失移出原操作数的位,而将其返回到操作数的另一端。 jed3WqQFqH7AWRjviKUxZgRM+/260YgWh8/7RY7PzpmJ/VBRiRBjWblk+Hd4ECNI

点击中间区域
呼出菜单
上一章
目录
下一章
×