当前位置: 首页 > news >正文

【C语言】位运算

我们在上学计算机的第一节课,就应该见过这些常见的运算符。然而,你可能有印象,但记不住众多操作符当中的位运算符,以及它们的作用和使用场景,我们的大脑会选择性地遗忘它认为没用的信息,存储下那些“有实际应用场景”的有效知识。平时写代码的时候,只会和十进制打交道,这是因为在计算机的底层会帮我们把10进制运算的问题转化为二进制运算,计算机已经帮我们封装了位运算的逻辑。那么,我们为什么还要了解位运算呢?

在实际开发中,位图(Bitmap)是一种常用的数据结构和技术。通过高效的存储和操作方式,提供了快速且节省内存的解决方案。
例如,检测一批开发板是否合格,其中一个对象中存在某个属性:object:{ standard:true; } 这个对象中还有其他属性,但检测是否合格只需要判断 standard == 1;那么,假设用bit位来表示合格与不合格,1表示是,0表示非。
那么1个bit位 :10010000 第一个和第四个合格,其他的不合格,由此,我们不需要使用object的方式进行存储,我们可能将原本占用了32个字节大小的存储空间的对象压缩成了一个比特,8个比特可以检测8个开发板的合格与否。
一个字节是8个比特,所以存储空间被优化了256倍,假如有1000w块开发板需要检测并返回结果,用对象的方式存储需要占用的内存空间是300GB的内存空间大小,如果我们换成用bit的方式实现检测,只需要占用2GB的存储空间大小便能够完成检测。

使用这种一串比特位存储0和1两种状态的数据结构称为位图(BITMAP),
由此,我们知道了位图具有很多好处:

	节省内存:位图能节省巨量的存储空间。内存效率高:使用位来表示信息,节省存储空间。例如,一个字节可以表示8个布尔值。对比数组 + 对象的方式不仅性能高出一个数量级而且极大节约了内存空间。快速访问:通过位运算可以快速地检查、设置或清除特定位的值。例如,查询第一个位置是否为 真:x & (1<<n);即使是某些批量操作和复杂操作,也只需要一次就能完成。便捷方便。资源管理、高效存储:用于管理有限资源的使用情况,如内存页的分配。状态标记:在控制多个布尔状态时(如任务调度),使用位图可以高效地管理和检查状态。图形显示:在简单图形系统中,用位图表示图像的像素状态。权限控制:利用位图表示用户或进程的权限集合。

移位运算符:专门写软件的人而言不重要,但对于嵌入式开发来说,这很重要 —> 因为在寄存器开发中会经常遇到。

<<   >> 
格式:表达式 << n 
例子:移位运算--->针对位:bit位 --->二进制有关 int a=10;a<<3;
右移:要注意 符号位 算术右移: 空出来的位 补符号位 >考虑符号位逻辑右移: 空出来的位 补0  --->单纯的数值运算位运算: -->所有的运算都针对 二进制bit位 1>位与:& 解释: 表达式1 & 表达式2 ==>双方转化为二进制,按位对比,相同位上都为1,结果为1 例如: short a=520;short b=250;a&b--->a:0000 0010 0000 1000b:0000 0000 1111 1010   & ------------------------------>0000 0000 0000 1000 ==> 82>位或:|解释: 表达式1 | 表达式2 ==>相同位上数据如果有1,结果为1例如:short a=520;short b=250;a|b--->a:0000 0010 0000 1000b:0000 0000 1111 1010   |-------------------------------------  0000 0010 1111 1010  ==>7623>异或:^ 解释:表达式1 ^ 表达式2 ==>相同位上数据不相同,结果为1 例如:short a=520;short b=250;a^b--->a:0000 0010 0000 1000b:0000 0000 1111 1010     ^ -------------------------------0000 0010 1111 0010 ==> 754 4>取反:~ 解释: ~表达式1 ===> 0变1   1变0 例如: short a=520;a:0000 0010 0000 1000~a;1111 1101 1111 0111 --->有问题:补码1111 1101 1111 0110 --->反码 1000 0010 0000 1001 --->原码 = -521组合模仿:C语言原装是没有同或 :可以通过 取反 + 异或 得到同或  ~(a^b):  --->达到同或

在嵌入式系统中,因为寄存器内存是有限的,对于内存空间的使用更为苛刻,位运算具有性能优势:
1、速度:位运算是基本的CPU操作,直接作用于数据的二进制表示,计算速度极快,比许多其他操作(如乘法、除法)更高效。
2、内存效率:通过位操作,可以在一个字节中存储多个布尔值,节省内存空间。
3、直接硬件控制:位运算能够直接操作硬件寄存器,方便设置或读取特定位,减少指令开销。
4、代码简洁、精确控制:使用位掩码进行状态管理和权限控制,使代码更简洁明了。提供对数据的精确控制,适合底层开发。
5、功耗降低:由于减少了处理器的运算时间和内存访问,能有效降低功耗,这是嵌入式系统中一个重要的考量。

位运算在资源有限、需要高效运行的嵌入式系统中有显著的性能优势,并节省了大量的内存空间。
位运算在控制硬件设备、检查传感器状态、高效传输和存储等多个场景中都十分必要,所以要熟悉位运算的方式。正如在编程之前,首先对每个过程中的逻辑环节都必须十分清晰,不可模糊编程。也可在这个过程中锤炼自己的编程思维,对业务流程也会更加清晰。

以上。

我是一个十分热爱技术的程序员,希望这篇文章能够对您有帮助,也希望认识更多热爱程序开发的小伙伴。
感谢!

相关文章:

【C语言】位运算

我们在上学计算机的第一节课&#xff0c;就应该见过这些常见的运算符。然而&#xff0c;你可能有印象&#xff0c;但记不住众多操作符当中的位运算符&#xff0c;以及它们的作用和使用场景&#xff0c;我们的大脑会选择性地遗忘它认为没用的信息&#xff0c;存储下那些“有实际…...

计算机体系结构之多级缓存、缓存miss及缓存hit(二)

前面章节《计算机体系结构之缓存机制原理及其应用&#xff08;一&#xff09;》讲了关于缓存机制的原理及其应用&#xff0c;其中提出了多级缓存、缓存miss以及缓存hit的疑问。故&#xff0c;本章将进行展开讲解&#xff0c; 多级缓存、缓存miss以及缓存hit存在的意义是为了保持…...

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线

【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据&#xff0c;LabVIEW 上位机绘制演化曲线 主要介绍了 R78/G15 开发板基于 Arduino IDE 环境串口打印温湿度传感器 DHT11 和温度传感器 DS18B20 传感器的数据&#xff0c;并通过LabVIEW上位机绘制演…...

Oracle Fetch子句

FETCH 子句在 Oracle 中可以用来限制查询返回的行数 Oracle FETCH 子句语法 以下说明了行限制子句的语法&#xff1a; [ OFFSET offset ROWS]FETCH NEXT [ row_count | percent PERCENT ] ROWS [ ONLY | WITH TIES ]OFFSET 子句 OFFSET 子句指定在行限制开始之前要跳过行…...

Linux应用——线程池

1. 线程池要求 我们创建线程池的目的本质上是用空间换取时间&#xff0c;而我们选择于 C 的类内包装原生线程库的形式来创建&#xff0c;其具体实行逻辑如图 可以看到&#xff0c;整个线程池其实就是一个大型的 CP 模型&#xff0c;接下来我们来完成它 2. 整体模板 #pragma …...

95.【C语言】数据结构之双向链表的头插,头删,查找,中间插入,中间删除和销毁函数

目录 1.双向链表的头插 方法一 方法二 2.双向链表的头删 3.双向链表的销毁 4.双向链表的某个节点的数据查找 5.双向链表的中间插入 5.双向链表的中间删除 6.对比顺序表和链表 承接94.【C语言】数据结构之双向链表的初始化,尾插,打印和尾删文章 1.双向链表的头插 方法…...

leetcode82:删除排序链表中的重复节点||

给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5]示例 2&#xff1a; 输入&#xff1a;head [1,1,1,2…...

【C#】使用.net9在C#中向现有对象动态添加属性

在 C# 中向现有对象动态添加属性并不像在 Python 或 JavaScript 中那样容易&#xff0c;因为 C# 是一种强类型语言。 但是&#xff0c;我们可以通过使用一些技术和库来实现这一点&#xff0c;例如扩展方法、字典等。本文将详细介绍如何在 C# 中实现这一点。ExpandoObject 方法 …...

Linux进程信号(信号的产生)

目录 什么是信号&#xff1f; 信号的产生 信号产生方式1&#xff1a;键盘 前台进程 后台进程 查看信号 signal系统调用 案例 理解进程记录信号 软件层面 硬件层面 信号产生方式2:指令 信号产生方式3:系统调用 kill系统调用 案例 其他产生信号的函数调用 1.rais…...

97_api_intro_imagerecognition_pdf2word

通用 PDF OCR 到 Word API 数据接口 文件处理&#xff0c;OCR&#xff0c;PDF 高可用图像识别引擎&#xff0c;基于机器学习&#xff0c;超精准识别率。 1. 产品功能 通用识别接口&#xff1b;支持中英文等多语言字符混合识别&#xff1b;formdata 格式 PDF 文件流传参&#xf…...

【算法】【优选算法】二分查找算法(上)

目录 一、二分查找简介1.1 朴素二分模板1.2 查找区间左端点模版1.3 查找区间右端点模版 二、leetcode 704.⼆分查找2.1 二分查找2.2 暴力枚举 三、Leetcode 34.在排序数组中查找元素的第⼀个和最后⼀个位置3.1 二分查找3.2 暴力枚举 四、35.搜索插⼊位置4.1 二分查找4.2 暴力枚…...

springboot初体验

目录 环境 controller 修改端口号 更改banner图标 运行结果 最核心的:自动装配 环境 jdk17springboot3.3.5maven3.8.2 controller controller层和启动类同级 package com.example.demo.controller; ​ import org.springframework.web.bind.annotation.RequestMapping;…...

使用kalibr_calibration标定相机(realsense)和imu(h7min)

vslam-evaluation/VINS/Installation documentation/4.IMU和相机联合标定kalibr_calibration.md at master DroidAITech/vslam-evaluation GitHub 目录 1.kalibr安装 1.1安装依赖项 1.2创建工作空间 1.3下载kalibr并编译 1.4设置环境变量 2.准备标定板 3.配置驱动和打…...

绿色工厂认定流程

以下是认定绿色工厂的一般流程&#xff1a; 编制年度创建计划 各省辖市、省直管县&#xff08;市&#xff09;会结合本地区重点产业发展现状&#xff0c;挑选一批基础条件良好、有创建意愿和条件的企业进行储备培育&#xff0c;并依据当地工业企业发展实际情况按年度制定绿色工…...

《Python游戏编程入门》注-第5章5

《Python游戏编程入门》的“Analog Clock示例程序”部分讲解了模拟时钟的实现方法。该模拟时钟可以通过时针、分针和秒针的旋转,显示当前时间,如图1所示。 图1 模拟时钟 1 绘制圆 从图1中可以看出,时钟的边缘是一个白色的圆,可以通过如图2所示的代码进行绘制。 图2 绘制圆…...

LangChain Ollama实战文献检索助手(二)少样本提示FewShotPromptTemplate示例选择器

本期是用样例来提示大模型生成我们想要的答案。即在输入中给定提示的样例&#xff0c;以及提示模板&#xff0c;然后匹配较相关的样例进行文献综述。 创建示例样本FewShotPromptTemplate 这里我用GTP-o1生成了几个回答&#xff0c;作为样本 samples [{"theme": &…...

K倍区间 C++

1230. K倍区间 - AcWing题库 一开始想到的用前缀和来做&#xff0c;时间复杂度为O(n^2),Time Limit Exceeded #include <iostream> #include <cstring> #include <algorithm> #include <cstdio>using namespace std;const int N 100010;int n,k; in…...

Linux - 弯路系列3:安装和编译libvirt-4.5.0

系统&#xff1a;Anolis8&#xff08;离线&#xff09; 目录 1、步骤2、make过程中的错误错误1&#xff1a;error: xdr_u_int64_t undeclared (first use in this function) 3、make install的错误错误1&#xff1a;/usr/bin/mkdir -p ""/usr/local/etc/libvirt/nwf…...

Jenkins插件使用问题总结

Git Push插件 插件介绍 主要是用于git推送代码到远程仓库中使用&#xff0c;插件地址 pipeline中使用 官方说明中只有一句代码gitPush(gitScm: scm, targetBranch: env.BRANCH_NAME, targetRepo: origin) 流水线语法中也做的不齐全所以一开始我老是设置错&#xff0c;导致代…...

u盘怎么重装电脑系统_u盘重装电脑系统步骤和详细教程【新手宝典】

u盘怎么重装电脑系统&#xff1f;一个u盘怎么重装电脑系统呢&#xff0c;需要将u盘制作成u盘启动盘pe&#xff0c;然后通过U盘启动盘进入pe进行安装系统&#xff0c;下面小编就教大家u盘重装电脑系统步骤和详细教程。 u盘启动是什么意思&#xff1f; U盘启动盘是一种具有特殊功…...

智能水塔改造指南:用S7-200PLC+超声波传感器实现低成本自动化

智能水塔改造实战&#xff1a;S7-200PLC与超声波传感器的低成本自动化方案 在农村和小型工厂的实际运营中&#xff0c;水塔作为重要的供水设施&#xff0c;其稳定性和自动化程度直接影响着日常生产和生活。传统的人工监控方式不仅效率低下&#xff0c;还存在水位失控的风险。本…...

AI赋能情感短视频:5分钟打造电影级氛围感剪辑全攻略

深夜收到粉丝私信&#xff1a;“同样的素材&#xff0c;为什么专业博主的视频能让人眼眶湿润&#xff0c;我的却像流水账&#xff1f;”这个问题击中了短视频创作的核心痛点——氛围感缺失。传统剪辑需要导演思维专业技巧数小时打磨&#xff0c;而如今&#xff0c;借助AI工具&a…...

2026年漏水传感器选购指南:这5个品牌让您家远离水患隐患

随着智能家居与工业自动化水平的提升&#xff0c;漏水传感器作为预防水患的关键设备&#xff0c;其市场需求和技术要求日益增长。在2026年的当下&#xff0c;行业面临着从民用住宅到数据中心、从能源化工到精密制造等多场景的复杂挑战。本文将深入分析当前漏水传感器领域的技术…...

M2LOrder模型LSTM原理浅析与实战:时序情感分析入门

M2LOrder模型LSTM原理浅析与实战&#xff1a;时序情感分析入门 你是不是经常看到一些智能客服或者社交平台&#xff0c;能分析出一段对话里用户情绪的变化&#xff1f;比如&#xff0c;用户一开始有点生气&#xff0c;聊着聊着又缓和了&#xff0c;最后还挺满意。这种对“情绪…...

机器人避障轨迹优化实战:用Python+Scipy从数学推导到完整代码实现

机器人避障轨迹优化实战&#xff1a;PythonScipy从数学建模到工程实现 当你在机器人实验室里第一次看到机械臂撞翻咖啡杯&#xff0c;或是无人机在演示中撞上窗帘时&#xff0c;就会明白轨迹优化不仅仅是数学公式——它是让机器人安全高效工作的核心技术。本文将带你从零开始&a…...

别再让扰动拖慢你的系统!手把手教你用MATLAB/Simulink实现非线性扰动观测器(附完整代码)

非线性扰动观测器实战指南&#xff1a;从理论到MATLAB/Simulink完整实现 在控制工程领域&#xff0c;非线性扰动观测器&#xff08;NDOB&#xff09;就像一位隐形的守护者&#xff0c;默默抵消着系统运行中各种未知干扰的影响。想象一下&#xff0c;当你精心设计的控制器因为突…...

PCB板验证

铺铜完成是PCB设计中的一个重要里程碑&#xff0c;但还不是终点。在发送给板厂生产之前&#xff0c;还需要完成一系列关键的验证、优化和文件输出工作。简单来说&#xff0c;铺铜之后的标准流程是&#xff1a;设计验证&#xff08;DRC/DFM&#xff09; → 必要分析&#xff08;…...

不止于教程:用QGIS 3.30 + PyQt5从零打造一个极简版GIS桌面应用

从零构建GIS桌面应用&#xff1a;QGIS 3.30与PyQt5深度整合实战 当我们需要开发一个轻量级地理信息系统时&#xff0c;QGIS的Python API提供了强大而灵活的选择。不同于简单的脚本编写&#xff0c;将QGIS作为引擎嵌入到自定义PyQt5应用中&#xff0c;能够实现高度定制化的GIS解…...

XL6008直流升压电路设计与应用详解

1. 直流升压电路设计详解1.1 应用背景与需求分析便携式电子设备在现代生活中扮演着越来越重要的角色&#xff0c;从手持扫码设备到数码相机闪光灯&#xff0c;这些设备对电源系统提出了特殊要求。由于便携性限制&#xff0c;设备通常采用单节或少量电池供电&#xff0c;导致输出…...

IndexTTS-2-LLM语音合成应用:无障碍辅助与内容创作指南

IndexTTS-2-LLM语音合成应用&#xff1a;无障碍辅助与内容创作指南 1. 语音合成技术概述 1.1 什么是智能语音合成 智能语音合成&#xff08;Text-to-Speech&#xff0c;TTS&#xff09;技术能够将文字信息转换为自然流畅的语音输出。IndexTTS-2-LLM作为新一代语音合成系统&a…...