第四章-数据操作<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获取中国节假日数据记录入JSON文件

《Python获取中国节假日数据记录入JSON文件》项目系统内置的日历应用为了提升用户体验,特别设置了在调休日期显示“休”的UI图标功能,那么问题是这些调休数据从哪里来呢?我尝试一种更为智能的方法:P... 目录节假日数据获取存入jsON文件节假日数据读取封装完整代码项目系统内置的日历应用为了提升用户体验,

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

Java利用JSONPath操作JSON数据的技术指南

《Java利用JSONPath操作JSON数据的技术指南》JSONPath是一种强大的工具,用于查询和操作JSON数据,类似于SQL的语法,它为处理复杂的JSON数据结构提供了简单且高效... 目录1、简述2、什么是 jsONPath?3、Java 示例3.1 基本查询3.2 过滤查询3.3 递归搜索3.4

MySQL大表数据的分区与分库分表的实现

《MySQL大表数据的分区与分库分表的实现》数据库的分区和分库分表是两种常用的技术方案,本文主要介绍了MySQL大表数据的分区与分库分表的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. mysql大表数据的分区1.1 什么是分区?1.2 分区的类型1.3 分区的优点1.4 分

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Redis 中的热点键和数据倾斜示例详解

《Redis中的热点键和数据倾斜示例详解》热点键是指在Redis中被频繁访问的特定键,这些键由于其高访问频率,可能导致Redis服务器的性能问题,尤其是在高并发场景下,本文给大家介绍Redis中的热... 目录Redis 中的热点键和数据倾斜热点键(Hot Key)定义特点应对策略示例数据倾斜(Data S

Python使用DrissionPage中ChromiumPage进行自动化网页操作

《Python使用DrissionPage中ChromiumPage进行自动化网页操作》DrissionPage作为一款轻量级且功能强大的浏览器自动化库,为开发者提供了丰富的功能支持,本文将使用Dri... 目录前言一、ChromiumPage基础操作1.初始化Drission 和 ChromiumPage