本文主要是介绍第四章-数据操作<Foundations of computer science>(Part One),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在第三章中,我们展示了如何在计算机中存储不同类型的数据。在本章中,我们将展示如何对存储在计算机中的数据进行操作。对数据的操作可以分为三大类:逻辑操作、移位操作和算术操作。
目标
在学习了本章之后,学生应该能够:
列出对数据进行的三类操作
对位模式进行一元和二进制逻辑操作。
区分逻辑移位和算术移位
对位模式执行逻辑移位操作。
对以二进制补码格式存储的整数执行算术移位操作。
当整数以二进制补码格式存储时,对整数执行加减操作。
当整数以符号和大小格式存储时,对其执行加法和减法。
当实数存储为浮点格式时,对实数进行加减操作。
了解逻辑和移位操作的一些应用,如设置、解除设置、翻转特定位。
4.1逻辑运算
在第三章中,我们讨论了这样一个事实:计算机中的数据是以位模式存储的。逻辑运算是指将相同的基本运算应用于模式的各个位的运算。或者以两种模式在两个相应的位上。这意味着我们可以在位级和模式级定义逻辑操作。模式级的逻辑操作是n个相同类型的逻辑操作,在位级,其中n是模式中的位数。
4.1.1位级逻辑操作
位可以取两个值中的一个:0或1。如果我们将0解释为值false和
1作为true,我们可以应用布尔代数中定义的操作来操作位。布尔代数是为了纪念乔治·布尔而命名的,它属于一个叫做逻辑的特殊数学领域.附录e简要讨论了布尔代数及其在构建计算机逻辑电路中的应用。在本节中,我们将简要介绍用于处理位的四种位级运算:NOT, AND, OR和XOR。
布尔代数和逻辑电路在附录E中讨论。
图4.1显示了这四个位级操作符及其真值表的符号。真值表定义了每个或多个可能输入的输出值。
注意,每个运算符的输出总是1位,但输入可以是1位或2位。
NOT
NOT操作符是一元操作符:它只接受一个输入。输出位是输入位的补码。如果输入为0,输出为1,如果输入为1,输出为
0. 换句话说,NOT运算符翻转它的输入。NOT运算符的真值表只有两行,因为单个输入可以是0或1:两种可能性。
AND
AND运算符是一个二进制运算符:它接受两个输入。如果两个输入都是1,则输出位为1,而在其他三种情况下输出位为0。AND运算符的真值表有四行,因为有两个输入,就有四种可能的输入组合。
一个属性
AND运算符的一个有趣之处在于,如果一个输入中的位为0,我们不必检查另一个输入中的相应位:我们可以很快得出结果为0的结论。当讨论这个运算符在位模式上的应用时,使用这个性质:
For x = 0 or 1 x AND 0 → 0 and 0 AND x → 0
OR
OR运算符也是一个二进制运算符:它接受两个输入。如果两个输入都为0,则输出位为0,其他三种情况下输出位为1。OR运算符的真值表也有四行。OR运算符有时被称为包含或运算符,因为不仅当其中一个输入为1时输出为1,而且当两个输入都为1时输出也为1。这与我们接下来要介绍的算子是相反的。
一个属性
关于OR运算符的一个有趣之处在于,如果一个输入中的位为1,我们不必检查另一个输入中的相应位:我们可以很快得出结果为1的结论。当讨论这个运算符在位模式上的应用时,使用这个性质:
For x = 0 or 1 x OR 1 → 1 and 1 OR x → 1
XOR
异或运算符(发音为' exclusive-or ')也是像OR运算符一样的二进制运算符,只有一个区别:如果两个输入都是1,则输出为0。我们可以用另一种方式来看待这个运算符:当两个输入相同时,输出为0,当两个输入不同时,输出为1。
例4.1
在英语中,我们有时使用连词or表示包含或,有时表示排除或。
a.在I wish to have a car or a house这句话中,“或”是包含意义上的——我想要一辆车,一所房子,或者两者兼而有之。
b.句子“今天不是星期一就是星期二”用的是排他意义上的“或”——今天不是星期一就是星期二,但不能两者都是。
例4.2
异或运算符实际上并不是一个新运算符。我们总是可以用其他三个运算符来模拟它。下面两个表达式是等价的:
x XOR y ↔ [x AND (NOT y)] OR [(NOT x) AND y]
如果我们对两者都建立真值表,就可以证明其等价性。
一个属性
异或的一个性质是,如果一个输入中的位为1,则结果是另一个输入中相应位的补码。当讨论这个运算符在位模式上的应用时,我们使用这个性质:
For x = 0 or 1 1 XOR x → NOT x and x XOR 1 → NOT x
4.1.2模式级逻辑操作
相同的四个操作符(NOT、AND、OR和XOR)可以应用于n位模式。
其效果与将每个操作符应用于NOT的每个单独位以及将其他三个操作符应用于每个相应的位对相同。图4.2显示了这四个具有输入和输出模式的操作符。
例4.3
对位模式10011000使用NOT运算符。
解决方案
解决方案如下所示。注意,NOT操作符将每一个0变为1,每一个1变为0:
应用程序
可以使用四个逻辑运算来修改位模式。
补充
NOT操作符的唯一应用是补充整个模式。将此运算符应用于模式时,每0更改为1,每1更改为0。这有时被称为1的补码运算。例4.3展示了互补的效果。
清除特定位
AND运算符的一个应用是取消(强制为0)位模式中的特定位。在这种情况下,第二个输入称为掩码。掩码中的0位消除了第一次输入对应的位:掩码中的1位保持第一次输入对应的位不变。这是由于我们提到的AND运算符的属性:如果其中一个输入是0,那么无论另一个输入是什么,输出都是0。取消模式中的位可以有许多应用。例如,如果一个图像每像素只使用一个比特(黑白图像),那么我们可以使用掩码和and操作符将特定像素设置为黑色。
设置特定位
OR运算符的一个应用是在位模式中设置(强制为1)特定的位。
同样,我们可以使用遮罩,但是不同的遮罩。掩码中的1位设置了第一次输入的对应位,掩码中的0位保持了第一次输入的对应位不变。这是由于我们提到的OR运算符的性质:如果其中一个输入是1,那么不管另一个输入是什么,输出都是1。
在模式中设置位有许多应用。例如,如果图像每个像素(黑白图像)只使用一个比特,那么我们可以使用掩码和OR操作符将特定像素变为白色。
翻转特定位
异或运算符的一个应用是在位模式中翻转(补全)特定的位。同样,我们可以使用遮罩,但是不同的遮罩。掩码中的1位翻转第一个输入对应的位和掩码中的0位保持第一个输入对应的位不变。这是由于我们提到的异或运算符的性质:如果其中一个输入是1,输出是相应位的补码。
请注意NOT操作符和异或操作符之间的区别。NOT运算符对输入中的所有位进行补全,而异或运算符只对第一个输入中由掩码定义的特定位进行补全。
例4.9
使用掩模翻转图案最左边的五个位。用图案测试遮罩
10100110.
这篇关于第四章-数据操作<Foundations of computer science>(Part One)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!