C的温故而知新:位操作(C Primer Plus第十五章)

news/2024/9/17 19:17:17/ 标签: c语言, 开发语言

第十五章:位操作

这一章的篇幅不是很长,但既然能单独作为一章来讲的话,应该蛮重要的,但是我貌似没有总结出多少需要注意、加强记忆的东西,可见在JAVA的日常开发过程中基本不太遇见有关位操作的内容,所以我也就不晓得那块属于本章的重点内容了。不过,不要紧,先挑我感觉比较重要的内容去记录一下。

首先,关于二进制与十进制,说大一点,还有八进制和十六进制,在之前都已经介绍过了,理解一下计算机只可以识别0、1就可以对这一些有关进制的内容有较好的理解。通常,一字节包含八位,C语言用字节来表示存储系统字符集所需的大小。可以从左到右给这八位分别编号为7~0。

C按位运算符

按位逻辑运算符,用于整型数据,包括char,这些操作都是针对每一个位进行,不影响左右两侧的位。

二进制反码或按位取反:~

一元运算符~把1变为0,把0变为1。该运算符不会改变原有的值,是创建了一个可以使用或赋值的值。

unsigned char val = 2;
~val;//2的二进制表示为00000010,那么~val的值为11111101,也就是253
unsigned char newval = ~val;

按位与:&

二元运算符,逐位比较两个运算对象,生成一个新值,对于每个位,只有两个运算对象中相应的位都为1时,结果才为1,。还有一个按位与和赋值结合的运算符: &=。

按位或:|

二元运算符,逐位比较两个运算对象,生成一个新值,对于每个位,只有两个运算对象中相应的位为1时,也就是两个位中有一个为1,结果就为1,。还有一个按位或和赋值结合的运算符: |=。

按位异或:^

二元运算符,逐位比较两个运算对象,生成一个新值,对于每个位,如果两个运算对象中相应的位为1(但不是两个为1),结果为1(也就是一真一假)。还有一个按位异或和赋值结合的运算符: ^=。

常用用法

掩码:按位与运算常用于掩码,掩码中的1表示透明,0表示不透明。使用掩码之后,会将不透明的位掩掉,因为按位与操作只要有0,结果就为0。也就是只显示需要的位数据。

打开位(设置位):打开一个值中的特定位,同时保持其他位不变。使用按位或运算符,将想要设置为1的位的码内容设置为1,想要保持不变的位码内容设置为0。

关闭位(清空位):不影响其他位的情况下关闭指定的位。使用按位与运算符,将想要设置为0的位的码内容设置为0,想要保持不变的位码内容设置为1。

切换位:打开已关闭的位,或关闭已打开的位。可以使用按位异或运算符切换位。将想要设置为开的位,对应码以及原码设置为1和0。

检查位的值:检查某位的值,要先覆盖其他位,以免产生影响。

if((flags & MASK) == MASK)//按位运算符的优先级比==低puts(“Wow!!”);

移位运算符

左移(<< ):左移运算符将其左侧的运算对象每一位的值向左移动其右侧的运算对象指定的位数。左侧运算对象移出左末端的值丢失,用0填充空出的位置。产生一个新的值,但是并不改变运算对象。所以与赋值运算符结合可以得到(<<=)

(10001010)<<2//得到结果(00101000)

右移(>> ):右移运算符将其左侧的运算对象每一位的值向右移动其右侧的运算对象指定的位数。左侧运算对象移出右末端的值丢失,对于无符号的类型,用0填充空出的位置;有符号类型的话,取决于机器,可用0填充,或者用符号位(最左侧位)的副本填充。产生一个新的值,但是并不改变运算对象。所以与赋值运算符结合可以得到(<<=)

(10001010)>>2//得到结果(00100010)某些系统上是(11100010)

用法:针对2的幂提供快速有效的乘法和除法。

number>>n;//如果number为非负值,则number除以2的n次幂
number<<n;//number乘以2的n次幂

位字段

操纵位的第二种方法是位字段。位字段是一个signed int或unsigned int或_Bool类型变量中的一组相邻的位。通过一个结构声明来建立,该结构为每个字段提供标签,并确定该字段的宽度。可以通过普通的结构成员运算符(.)单独为这些字段赋值。

struct{unsigned int autfd : 1;unsigned int bldfc : 1;unsigned int undkn : 2;bool flag          ; 1;
}prnt;
prnt.autfd = 0;
prnt.undkn = 3;

要确保所赋的值不超出字段可容纳的范围。可以使用未命名的字段宽度填充未命名的洞。使用一个宽度为0的未命名字段迫使下一个字段与下一个整数对齐。

对齐特性

_Alignof运算符给出一个类型的对齐要求,比如:

size d_align = _Alignof(float);

float类型的对齐值要求是d_align的值。可以使用_Alignas说明符指定一个变量或类型的对齐值。但是不应该要求该值小于基本对齐值。

在这里插入图片描述


http://www.ppmy.cn/news/1517151.html

相关文章

Apache Doris 使用 CBO 和 RBO 结合的优化策略

Apache Doris 在查询优化方面通过结合 RBO 和 CBO,实现了对简单和复杂查询的高效优化。RBO 负责处理常量折叠、子查询改写和谓词下推等基础优化操作,而 CBO 则在 Join Reorder 等复杂场景中发挥作用。这种结合策略使得 Apache Doris 能够在面对各种查询场景时,既能保证优化过…

4170条中医综合真题中医真题ACCESS\EXCEL数据库

今天这份数据库与《4820道西#医综合真#题西#医真题ACCESS数据库》结构相同&#xff0c;包含4千多道真题。这个数据库包含3个表&#xff0c;一个是分类表&#xff08;SECTION_BEAN&#xff09;&#xff0c;一个是题库主表&#xff08;QUESTION_INFO_BEAN&#xff09;&#xff0c…

Queues

概述 RabbitMQ 是一个消息中间件: 它接收、存储并转发消息数据。本教程将带你通过一系列步骤来设置和使用 RabbitMQ。 环境准备 1. 安装 RabbitMQ - [下载](https://www.rabbitmq.com/download.html)并安装RabbitMQ服务器。 - 启动RabbitMQ服务器。 - 通过浏览器访问 htt…

全方位解析红鲸音视频会议SDK助力系统功能集成

在数字化转型的浪潮中&#xff0c;企业对于高效沟通与协作的需求日益迫切。随着远程办公、在线教育、在线医疗等场景的兴起&#xff0c;音视频会议功能已成为众多企业平台不可或缺的一部分。然而&#xff0c;对于许多企业而言&#xff0c;如何将这一功能无缝集成到现有系统或平…

只用一个 HTML 元素可以写出多少形状?——不规则图形篇

上一篇章的末尾&#xff08;伪元素篇&#xff09;&#xff0c;我们送上了气泡框和笑脸两个好玩的案例。这两个案例其实就是使用伪元素实现的不规则图形的两个预热案例。 相信经过这两个案例的预热&#xff0c;聪明的您已经发现&#xff0c;通过适当且合理的拆分&#xff0c;就…

【Android 设备上的所有相关 WiFi 命令和使用方法】

请注意,这些命令的可用性可能会因设备型号和 Android 版本的不同而有所变化。 1. adb shell cmd wifi 命令 1.1 查看 WiFi 状态 命令:adb shell cmd wifi status功能: 查看 WiFi 的当前状态,如是否开启、连接的网络等。示例:adb shell cmd wifi status1.2 执行 WiFi 扫描 命…

王立铭脑科学50讲:34、两性,脑功能有没有性别差异

王立铭脑科学50讲&#xff1a;34、两性&#xff0c;脑功能有没有性别差异 自己的学习笔记。 1、从脑科学角度出发&#xff0c;1在认知能力上&#xff0c;两性在认知能力上&#xff0c;差别是微乎其微的。 有这个一个思想实验&#xff0c;假设刚开始两性有差异&#xff0c;经…

【人工智能 | 机器学习 | 理论篇】决策树(decision tree)

文章目录 1. 基本流程2. 划分选择2.1 信息增益2.2 增益率2.3 基尼系数 3. 剪枝处理3.1 预剪枝3.2 后剪枝 4. 连续与缺失值4.1 连续值处理4.2 缺失值处理 5. 多变量决策树 1. 基本流程 二分类任务决策树流程&#xff1a; 决策树&#xff1a;包含 1个根结点、若干个内部结点、若…

大数据技术之Flume应用案例(2)

目录 监控端口数据官方案例 步骤 1: 准备环境 步骤 2: 配置 Flume Agent 步骤 3: 启动 Flume Agent 步骤 4: 发送数据到 Flume 步骤 5: 查看 HDFS 中的数据 注意事项 示例说明 实时监控单个追加文件案例 需求分析 实现步骤 &#xff08;1&#xff09;确保环境变量配…

WMI (Windows Management Instrumentation)类集合

WMI (Windows Management Instrumentation) 是一个强大的系统管理工具&#xff0c;包含大量的类&#xff0c;用于检索和操作系统信息。WMI 类的数量庞大&#xff0c;涵盖从操作系统到硬件设备的各种信息。 WMI 类通常以 Win32_ 或 CIM_ 前缀开头。Win32_ 类主要用于Windows系统…

AI绘画工具 Stable Diffusion【插画转绘】:建筑 | 风景| 人像照片的插画转绘制作教程,照片秒变插画风格图片!

大家好&#xff0c;我是画画的小强 关于Stable Diffusion 的插画转绘&#xff0c;今天给大家分享一种制作方法。我们先看一下效果图。 一. 图片转插画的制作方法 本期教程我们将使用AI绘画工具Stable Diffusion&#xff0c;关于SD的安装和入门使用可以看看我的往期入门教程…

uniapp u--input实现select下拉列表 input点击事件

背景&#xff1a; 技术框架&#xff1a; uniapp框架(vue2语法)uView组件库。 通过form表单实现数据列表的“查询”功能。注意&#xff1a; 1、<u--form>内部嵌套<u-form-item>&#xff0c;<u-form-item>内部嵌套<u--input>表单组件。 2、H5浏览器端&am…

HTTP 414错误问题

问题描述&#xff1a; 在一次前端编辑报表完成&#xff0c;打开审核人选择弹出框的时候&#xff0c;layer直接报414错误。 问题分析&#xff1a; HTTP 414是HTTP协议中的一个状态码&#xff0c;表示请求的URI&#xff08;Uniform Resource Identifier&#xff09;过长&#…

海睿思通过华东江苏大数据交易中心数商认证,提供高质量数据治理服务!

近日&#xff0c;中新赛克海睿思成功通过华东江苏大数据交易中心的数商认证&#xff0c;获得华东江苏大数据交易中心颁发的“数据治理服务商”证书。 华东数交是在实施“国家大数据战略”大背景下&#xff0c;经国家批准的华东地区首个省级特色数据要素交易平台&#xff0c;致力…

美客多卖家如何借助自养号测评提升销量

在美客多这一电商平台上&#xff0c;尽管当前多数卖家尚未充分利用测评技术&#xff0c;但其作为低成本、高回报的推广方式&#xff0c;无疑蕴藏着巨大的市场潜力。面对竞争相对缓和的市场环境及卖家对测评概念的普遍忽视&#xff0c;以下是对测评技术重要性的强调及其实施策略…

Adobe After Effects的插件--------CC Ball Action

CC Ball Action是粒子效果器,其将2D图层变为一个个由3D小球构成的图层。它是AE内置的3D插件。 使用条件 使用该插件的图层需是2D图层。 我们以一张图片素材为例: 给图片图层添加CC Ball Action效果控件,然后新建一个摄像机(利用摄像机旋转、平移、推拉工具,方便在各个角…

Spark MLlib 特征工程系列—特征转换VectorSizeHint

Spark MLlib 特征工程系列—特征转换VectorSizeHint VectorSizeHint 是 Spark 提供的一个特征转换器,用于指定向量列的大小(即维度)。在一些特征转换和建模过程中,要求输入的向量必须有固定的大小。当数据中包含不同大小的向量时,Spark 可能无法自动推断出向量的正确大小…

基于Vue3和Node.js的完整增删改查项目实现教程:从后端封装到前端调用

在 Node.js 中封装一个增删改查&#xff08;CRUD&#xff09;接口&#xff0c;并在 Vue 3 前端调用这些接口。整个过程包括后端 API 的创建和前端的调用。 一、安装 Node.js 和 Express 脚手架 1. 安装 Node.js 首先&#xff0c;你需要安装 Node.js。你可以通过以下步骤进行安…

零基础入门转录组数据分析——预后模型之多因素cox模型

零基础入门转录组数据分析——预后模型之多因素cox模型 目录 零基础入门转录组数据分析——预后模型之多因素cox模型1. 预后模型和多因素cox模型基础知识2. 多因素cox预后模型&#xff08;Rstudio&#xff09;——代码实操2. 1 数据处理2. 2 构建多因素cox模型&#xff08;用输…