一起talk C栗子吧(第十九回:C语言实例--位操作)

2024-03-12 05:18

本文主要是介绍一起talk C栗子吧(第十九回:C语言实例--位操作),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


各位看官们,大家好,上一回中咱们说的是输出十六进制的例子,这一回咱们说的例子是:位操作。闲话

休提,言归正转。让我们一起talk C栗子吧!


看官们,位操作有五种,与、或、非、异或、移位。接下来咱们分别介绍这些操作。为了方便说明,我们

先统一做一下说明,位操作的对象是比特位。假如有三个比特位:A、B和C,大家都知道比特位的值只有0

或者1两种,所以A、B和C的值是0或者1.我们把A和B当作位操作的对象,C当作A和B操作的结果。


与操作:操作符为&。例子:C=A & B.只有A和B的值都为1时,C的值才为1.其它情况时,C的值为0。

或操作:操作符为|。例子:C=A | B.只要A和B中有一个值为1时,C的值就为1.其它情况时,C的值为0。

非操作:操作符为~。例子:C=~A.如果A的值为1时,C的值才为0.反之,C的值为1。

异或操作:操作符为^。例子:C=A ^ B.只有A和B的值不相同时,C的值才为1.其它情况时,C的值为0。


移位操作:分为右移位和左移位两种。操作符为>>和<<。向左移位的话,右边空缺出来的位会补为0.向右

移位时有两种不同情况:算术移位和逻辑移位。使用算术移位时左边空缺出来的位会除去最高位操持不变

外,其它空缺位补为0.使用逻辑移位时,左边空缺出来的位被补为0.一般情况下,编译器都是使用算术移位,

其实对于无符号数来说,不论是算术移位还是逻辑移位,他们的操作结果都一样。对于有符号数来说,要

不一样了,因为有符号的数的最高位是用来表示符号的,特别是有符号数中的负数,它们的最高们是1.因

此使用右移位操作时要注意一下移位对象。另外,左称位操作相当于乘以2,右移位操作相当于除以2.当然

移动的位数不能超过变量拥有的最大的位数。因为移位操作的效率高,所以它可以取代乘除法。


看官们,我们说了这么多位操作,到底有什么用途?看官莫急,通过位操作,可以取出某个位串中的一部

分位,也可以对位串的某些位置置0和1.常见的做法是,首先定义一个掩码,通过掩码来对原来的位串进行

操作,比如取出A中的4和5位的值,C=(A&00011000)>>3。


看官们,位操作中的与或操作容易与逻辑运算中的与或运算混淆。我在这里给大家作一下说明:

从“外表”上来看,它们是不同的:与操作使用&而与运算使用&&。或操作使用|而与运算使用||,与或操作

的运算符和与或运算的操作符明显不一样。

从“内心”上来看,它们也是不同的:与或操作是对变量存储单元中的位进行操作,操作的结果就是新的变量。

与或运算是对变量或表达式的进行真假判断,它的结果要么是真,要么是假。大家可以是“外表”和“内心”来区

分与或操作和与或运算。


各位看官,关于位操作例子咱们就说到这里。欲知后面还有什么例子,且听下回分解。



这篇关于一起talk C栗子吧(第十九回:C语言实例--位操作)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Java操作ElasticSearch的实例详解

《Java操作ElasticSearch的实例详解》Elasticsearch是一个分布式的搜索和分析引擎,广泛用于全文搜索、日志分析等场景,本文将介绍如何在Java应用中使用Elastics... 目录简介环境准备1. 安装 Elasticsearch2. 添加依赖连接 Elasticsearch1. 创

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

C语言线程池的常见实现方式详解

《C语言线程池的常见实现方式详解》本文介绍了如何使用C语言实现一个基本的线程池,线程池的实现包括工作线程、任务队列、任务调度、线程池的初始化、任务添加、销毁等步骤,感兴趣的朋友跟随小编一起看看吧... 目录1. 线程池的基本结构2. 线程池的实现步骤3. 线程池的核心数据结构4. 线程池的详细实现4.1 初

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类