C语言位操作
第一部分位操作符位与1.注意是位与是逻辑与2.真值表000 010 111 100位与操作特点只有1和1位与的结果为1。3.位与和逻辑与的区别位与时两个操作数是按照二进制位批次对应位相与的。如下图逻辑与是两个操作数作为整体相与的不是零全为1非0即1.0XAA0XF0111位或|1.注意|为位或||为逻辑或2.真值表000 011 111 101位或操作特点只有0和0位与的结果为0。只要有一个一就为13.位与和逻辑与的区别位与时两个操作数是按照二进制位批次对应位相或的。逻辑或是两个操作数作为整体相或的不是零全为1非0即1位取反~1.注意C语言中位取反是~逻辑取反是2.按位取反是将操作数的二进制位逐个按位取反0变成11变成0.而逻辑取反是真的变成假的假的变成真的。只有0才是假不是0全为真3.一般按位取反显示结果很大因为是32位二进制。4.任何非0的数逻辑取反再取反得到1任何非零的数按位取反再取反得到本身。位异或^1.位异或真值表1^10 0^00 1^01 0^112.2个数如果相等结果为0两个数如果不等结果为1两个数相异就进行或操作位与 位或 位异或总结位与任何数其实就是1或0与1位与无变化与0位与都为0位或任何数其实就是1或0与1位或都为1与0位与无变化位异或任何数其实就是1或0与1位异或会取反与0位与无变化左移位 右移位C语言的移位取决于数据类型对于无符号数来说左移时右侧补0(相当于逻辑移位)对于无符号数来说右移时左侧补0(相当于逻辑移位)对于有符号数来说左移时右侧补0(叫算术移位相当于逻辑移位)对于有符号数来说右移时左侧补符号位(如果是正数就补0负数就补1)第二部分位与位或位异或在操作寄存器时的特殊操作一.先理解结构SoC CPU 内核 内存 各种外设GPIO、串口、定时器等是一整套微型系统是一个芯片CPU 是专门处理、执行程序的硬件读取指令翻译执行外设就是专门用来干这些实际具体工作的硬件模块常见外设GPIO控制引脚电平点灯、读取按键。输出高低电平。UART 串口和别的设备收发字符串打印日志。SPI / I2C跟别的芯片通信比如显示屏、传感器。定时器 TIM计时、延时、产生 PWM控制电机亮度。ADC读取模拟电压读电位器、传感器。寄存器是CPU与外设的沟通桥梁因为语言不通。并且CPU向寄存器中写入一个命令外设就一直执行命令。RAM(随机存储器):1.可读可写断电数据全部丢失。2.单片机/Soc里用来存放正在运行的变量、堆栈。ROM(只读存储器)1.断电数据不会丢 2.存放你的程序代码、常量。程序烧录在这里IO口输入输出口也是一种外设就是芯片外面一根根引脚。用来读外面信号或者输出信号给外部设备。二.寄存器操作要求刚刚说寄存器是CPU传入指令控制外设所以操作寄存器就是操纵硬件。1.寄存器是按位进行使用的外设寄存器一般是 32 位由 32 个bit位组成每 1 个 bit 就是 0 或者 1。并且寄存器里的每一位各自负责一个功能。2.寄存器操作要求在设定特定位时不能影响其他位。3.操作方法读改写读出整个寄存器的位改变想改变的位的位置最后写入整个已经改完的所有位三.特定位清零用1.位与任何数其实就是1或0与1位与无变化与0位与都为02.如果希望将一个寄存器的某些特定位变成0而不影响其他位可以构造一个合适的1与0组成的数和这个寄存器原来的值进行位与操作。就可以将特定位清零。3.举例假设原来32位寄存器中的值为0XAAAAAAAA有八个A每个A代表4位需要将bit8~bit15清零而其他位不变可以将这个数与0XFFFF00FF十六进制F代表二进制1111进行位与。四.特定位1用|位或任何数其实就是1或0与1位或都为1与0位与无变化2.如果希望将一个寄存器的某些特定位变成1而不影响其他位可以构造一个合适的1与0组成的数和这个寄存器原来的值进行位或操作。就可以将特定位变1。3.举例假设原来32位寄存器中的值为0X123d0c57需要将bit4~bit7变为1而其他位不变可以将这个数与0X000000f0十六进制F代表二进制1111进行位或。五,特定位取反用^1.位异或任何数其实就是1或0与1位异或会取反与0位与无变化2.按位取反的用法和刚才讲的位与是类似的。我们要构造这样一个数要取反的指定位为 1其他位为 0这个数与原来的数进行位异或即可。第三部分如何用位运算构建特定二进制数一.寄存器位操作经常需要特定位给特定值1.根据上节可知对寄存器置1清0取反在于事先构建一个特别的数这个数和原来的数进行位与位或取反。即可达到要求。2.可以利用相关计算器直接给出特定32位特定数。但是不直观3.自己写代码利用位操作符号主要是移位和位取反来构建特定二进制数。二.使用位移获取特定值为一的二进制数1.首先最简单的就是用移位来获取特定位为1的二进制数。譬如我们需要一个bit3~bit7为1的二进制可以表示(0X1f3)2.进阶获取bit4~bit6为1同时bit23~bit28为1其余为0的二进制数。可以表示(0X74)|(0X3f23)三.结合位取反获取特定位为0的二进制数1.特定位为0比较少而其余位为1比较多适合左移加位取反的方式来构造。2.思路是先试图构造出这个数的位相反数再取反得到这个数例如要构造bit4~bit10为0其余位为1就先构造bit4~bit10为1其余位为0然后对这个数取反。~0X7f4四.总结1.如果要的数比较少位为1大部分位为0则可以通过连续很多个1左移n位得到。2.如果要的数比较少位为0大部分位为1则可以通过先构建其位反数然后再位取反得到。3.如果想要的数中连续1的部分不止一个那么可以通过多端分别构造然后再彼此位与即可。第四部分位运算实战演练回顾要置 1 用 |清零用 要取反用 ^~ 和 用来构建特定二进制其中设置就是设置为1清除就是设置为0.1、给定一个整型数 a设置 a 的 bit3保证其他位不变。aa|(13)2、给定一个整形数 a设置 a 的 bit3~bit7保持其他位不变。aa|(0X1f3)3、给定一个整形数 a清除 a 的 bit15保证其他位不变。aa(~(115))4、给定一个整形数 a清除 a 的 bit15~bit23保持其他位不变。aa~(0x1ff15)5、给定一个整形数 a取出 a 的 bit3~bit8。思路第一步将这个数的bit3~bit8不变其余位全部清零。第二步右移3位aa0X1f7)3)或者(a(0x3f3))36、用 C 语言给一个寄存器的 bit7bit17 赋值 937其余位不受影响。思路第一步将bit7~bit17清零第二步 bit7~bit17赋值aa(~(0X7ff7))aa|(9377)7、用 C 语言将一个寄存器的 bit7bit17 中的值加 17其余位不受影响。思路第一步先读出bit7~bit17 第二步将这个数加上17第三步将bit7~bit17清零 第四步加上第二部算出来的bit7~bit17第一步tepa(0X3ff7 ) teptep7 第二步tep17第三步aa~(0X3ff) 第四步a|tep8、用 C 语言给一个寄存器的 bit7bit17 赋值 937同时给 bit21bit25 赋值 17。第五部分.用宏定义来完成位运算C语言宏定义 #define宏是预处理指令预处理阶段做简单文本替换不做类型检查不占运行时间不是函数。

相关新闻

Akagi机器人插件接口完全参考:mjai协议、manifest配置与meta HUD详解

Akagi机器人插件接口完全参考:mjai协议、manifest配置与meta HUD详解

Akagi机器人插件接口完全参考:mjai协议、manifest配置与meta HUD详解 【免费下载链接】Akagi 支持雀魂、天鳳、麻雀一番街、天月麻將,能夠使用自定義的AI模型實時分析對局並給出建議,內建Mortal AI作為示例。 Supports Majsoul, Tenhou, Riic…

2026/10/17 21:27:59 阅读更多 →
从L2量产到无人驾驶:核心技术演进与产业转型深度解析

从L2量产到无人驾驶:核心技术演进与产业转型深度解析

1. 从“L2量产”到“无人驾驶布局”:一场渐进式革命的产业解读最近,长安汽车宣布其L2级智能驾驶辅助系统将在今年实现大规模量产装车的消息,在业内激起了不小的水花。这看似只是一家车企的技术节点公告,但结合“渝企纷纷布局无人驾…

2026/10/15 18:07:05 阅读更多 →
新能源汽车技术路线解析:纯电、混动、氢能博弈与智能化变革

新能源汽车技术路线解析:纯电、混动、氢能博弈与智能化变革

1. 从“老三样”到“新三样”:一场深刻的产业变局如果你在十年前走进一家4S店,销售顾问大概率会跟你聊“皮实耐用”、“保值率高”或者“维修方便”。那时候,桑塔纳、捷达、富康这“老三样”是无数家庭购车的启蒙老师,它们共同定义…

2026/10/15 18:24:13 阅读更多 →

最新新闻

如何用huggingface_hub一行代码安全加载engagement-predictor模型并做预测

如何用huggingface_hub一行代码安全加载engagement-predictor模型并做预测

【免费下载链接】engagement-predictor 项目地址: https://ai.gitcode.com/hf_mirrors/raviearjun/engagement-predictor 点击查看 免费下载 engagement-predictor 是一个基于 scikit-learn Ridge 回归的社交媒体互动预测模型,可通过 huggingface_hub 一…

2026/10/18 4:41:33 阅读更多 →
剪枝后还能打吗?Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B质量损失深度解析:KL 0.331与基准实测数据

剪枝后还能打吗?Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B质量损失深度解析:KL 0.331与基准实测数据

大模型人工智能模型压缩模型量化本地部署 【免费下载链接】Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-19B 点击查看 免费下载 Ornith-1.5-35B-A3B-OptiQ-4bit-REAP-…

2026/10/18 4:41:33 阅读更多 →
设备安全---IP防护

设备安全---IP防护

在工业电气设备、光电传感器、编码器、伺服电机、工业连接器、控制箱等产品的规格参数中,IP防护等级是出现频率最高的指标之一。 IP防护等级是一套外壳防护能力的编码体系,而非单一的强度指标。当前通用电气设备执行的标准为IEC 60529:2013(合…

2026/10/18 4:41:33 阅读更多 →
清理记事本:从信息筛选到知识管理的系统化实践

清理记事本:从信息筛选到知识管理的系统化实践

1. 从“清理记事本”这个动作说起:为什么一个看似简单的需求值得认真对待很多人第一次看到“清理记事本”这个标题,第一反应是:这有什么好讲的,不就是把记事本里的内容删掉、整理一下吗?但如果你真正长期使用记事本类工…

2026/10/18 4:41:33 阅读更多 →
Flutter引导页实战:PageView+Indicator实现动态指示器与状态持久化

Flutter引导页实战:PageView+Indicator实现动态指示器与状态持久化

我曾经和朋友讨论过一个问题:在 Flutter 里实现一个 App 首次启动的引导页,到底是不是只用 PageView 就能搞定?答案当然是否定的。真正把一个引导页做得完整、顺滑、可维护,背后其实还牵扯到页码监听、指示器动画、按钮状态管理、…

2026/10/18 4:41:33 阅读更多 →
主从博弈下综合能源微网需求响应优化调度模型全解析

主从博弈下综合能源微网需求响应优化调度模型全解析

第一次看到“基于主从博弈的综合能源微网需求响应优化调度模型”这个题目,很多人会把它当成一个普通的优化调度问题来读:目标函数、约束条件、求解器一跑,出结果就完事了。但我实际调过这类模型之后发现,真正难的不是数学工具&…

2026/10/18 4:40:33 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →