第四章-数据操作<Foundations of computer science>(Part One)

2023-12-10 13:05

本文主要是介绍第四章-数据操作<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)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/477181

相关文章

Python在二进制文件中进行数据搜索的实战指南

《Python在二进制文件中进行数据搜索的实战指南》在二进制文件中搜索特定数据是编程中常见的任务,尤其在日志分析、程序调试和二进制数据处理中尤为重要,下面我们就来看看如何使用Python实现这一功能吧... 目录简介1. 二进制文件搜索概述2. python二进制模式文件读取(rb)2.1 二进制模式与文本

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

在C#中分离饼图的某个区域的操作指南

《在C#中分离饼图的某个区域的操作指南》在处理Excel饼图时,我们可能需要将饼图的各个部分分离出来,以使它们更加醒目,Spire.XLS提供了Series.DataFormat.Percent属性,... 目录引言如何设置饼图各分片之间分离宽度的代码示例:从整个饼图中分离单个分片的代码示例:引言在处理

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

Go异常处理、泛型和文件操作实例代码

《Go异常处理、泛型和文件操作实例代码》Go语言的异常处理机制与传统的面向对象语言(如Java、C#)所使用的try-catch结构有所不同,它采用了自己独特的设计理念和方法,:本文主要介绍Go异... 目录一:异常处理常见的异常处理向上抛中断程序恢复程序二:泛型泛型函数泛型结构体泛型切片泛型 map三:文

详解C++ 存储二进制数据容器的几种方法

《详解C++存储二进制数据容器的几种方法》本文主要介绍了详解C++存储二进制数据容器,包括std::vector、std::array、std::string、std::bitset和std::ve... 目录1.std::vector<uint8_t>(最常用)特点:适用场景:示例:2.std::arra