第四章-数据操作<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

相关文章

GSON框架下将百度天气JSON数据转JavaBean

《GSON框架下将百度天气JSON数据转JavaBean》这篇文章主要为大家详细介绍了如何在GSON框架下实现将百度天气JSON数据转JavaBean,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录前言一、百度天气jsON1、请求参数2、返回参数3、属性映射二、GSON属性映射实战1、类对象映

sysmain服务可以禁用吗? 电脑sysmain服务关闭后的影响与操作指南

《sysmain服务可以禁用吗?电脑sysmain服务关闭后的影响与操作指南》在Windows系统中,SysMain服务(原名Superfetch)作为一个旨在提升系统性能的关键组件,一直备受用户关... 在使用 Windows 系统时,有时候真有点像在「开盲盒」。全新安装系统后的「默认设置」,往往并不尽编

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Java+AI驱动实现PDF文件数据提取与解析

《Java+AI驱动实现PDF文件数据提取与解析》本文将和大家分享一套基于AI的体检报告智能评估方案,详细介绍从PDF上传、内容提取到AI分析、数据存储的全流程自动化实现方法,感兴趣的可以了解下... 目录一、核心流程:从上传到评估的完整链路二、第一步:解析 PDF,提取体检报告内容1. 引入依赖2. 封装

使用Python的requests库来发送HTTP请求的操作指南

《使用Python的requests库来发送HTTP请求的操作指南》使用Python的requests库发送HTTP请求是非常简单和直观的,requests库提供了丰富的API,可以发送各种类型的HT... 目录前言1. 安装 requests 库2. 发送 GET 请求3. 发送 POST 请求4. 发送

MySQL中查询和展示LONGBLOB类型数据的技巧总结

《MySQL中查询和展示LONGBLOB类型数据的技巧总结》在MySQL中LONGBLOB是一种二进制大对象(BLOB)数据类型,用于存储大量的二进制数据,:本文主要介绍MySQL中查询和展示LO... 目录前言1. 查询 LONGBLOB 数据的大小2. 查询并展示 LONGBLOB 数据2.1 转换为十

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

Java整合Protocol Buffers实现高效数据序列化实践

《Java整合ProtocolBuffers实现高效数据序列化实践》ProtocolBuffers是Google开发的一种语言中立、平台中立、可扩展的结构化数据序列化机制,类似于XML但更小、更快... 目录一、Protocol Buffers简介1.1 什么是Protocol Buffers1.2 Pro