大家好我是网域小星球。前面我们学习的运算大多是面向日常逻辑的加减乘除、逻辑判断。而位运算是直接操作二进制比特位的运算效率极高、占用内存极小广泛用于硬件开发、嵌入式、网络协议、权限标志、数据压缩、算法优化。位段则可以精准控制变量占用比特位数极致节省空间。本篇完整讲解 6 种位运算 位段用法搭配实例、场景、经典算法VS2022 直接运行。目录一、本章学习目标二、二进制基础回顾三、六大基础位运算1. 按位与 2. 按位或 |3. 按位异或 ^4. 按位取反 ~5. 左移 6. 右移 四、位运算完整示例可直接运行五、位运算经典实用技巧1. 不用临时变量交换两个整数3. 指定位清零4. 指定位置 1六、位段位域精准内存控制1. 什么是位段2. 位段定义语法注意事项七、位运算 常见易错点八、本章核心总结下期预告一、本章学习目标掌握 6 大基础位运算与、或、异或、取反、左移、右移理解二进制底层逻辑熟练位运算常用技巧学会利用位运算交换数字、判断奇偶、清零、置位、取反掌握位段位域定义、使用与内存分配了解位运算在项目、嵌入式、底层开发的实际应用二、二进制基础回顾计算机所有数据底层都是二进制 0 和 11 个比特位 1bit1 字节 8bit位运算就是直接对每一个二进制位进行操作。三、六大基础位运算1. 按位与规则同一位置都为 1结果才是 1否则为 0用途清零、保留指定位、判断奇偶// 奇数二进制最后一位一定是1 if(n 1) { printf(奇数); }2. 按位或|规则有 1 则 1全 0 才 0用途固定位置置 1、组合标志位3. 按位异或^规则相同为 0不同为 1经典特性任何数异或自身 0任何数异或 0 本身用途不使用临时变量交换两个数、简单加密4. 按位取反~规则0 变 11 变 0注意涉及补码运算日常使用较少多用于底层掩码5. 左移a n整体二进制向左移动 n 位右侧补 0等价快速运算乘以 2 的 n 次方6. 右移a n整体二进制向右移动 n 位正数左侧补 0等价快速运算除以 2 的 n 次方向下取整四、位运算完整示例可直接运行#define _CRT_SECURE_NO_WARNINGS 1 #include stdio.h int main() { int a 5; // 0101 int b 3; // 0011 printf(a b %d\n, a b); // 0001 1 printf(a | b %d\n, a | b); // 0111 7 printf(a ^ b %d\n, a ^ b); // 0110 6 printf(a 1 %d\n, a 1);// 1010 10 printf(a 1 %d\n, a 1);// 0010 2 return 0; }五、位运算经典实用技巧1. 不用临时变量交换两个整数int x 10, y 20; x x ^ y; y x ^ y; x x ^ y;2. 快速判断奇偶if(x 1) printf(奇数); else printf(偶数);3. 指定位清零配合掩码实现固定位清零4. 指定位置 1配合掩码|实现标志位开启六、位段位域精准内存控制1. 什么是位段普通变量最小占用 1 字节8bit位段允许自定义成员占用多少个bit大幅节省内存。适用场景协议报文、硬件寄存器、状态标记、大量短状态存储2. 位段定义语法struct 结构体名 { 类型 成员名 : 比特位数; };3. 基础示例// 只用 341 位极度节省空间 struct Flag { unsigned int a : 3; // 占3位 unsigned int b : 4; // 占4位 unsigned int c : 1; // 占1位 };4. 位段使用struct Flag f; f.a 5; f.b 10; f.c 1;注意事项位段不能取地址跨编译器内存排布可能不同不适合跨平台位数不能超过当前类型最大比特数七、位运算 常见易错点混淆逻辑与 和按位与 、逻辑或 ||和按位或 |移位运算负数规则不同开发中尽量只对正数移位异或交换变量仅适用于整数不能用于浮点数位段跨平台兼容性差项目通用数据尽量少用忽略补码规则误用按位取反八、本章核心总结位运算直接操作二进制位效率极高底层开发必备清零判断、|置位、^异或交换 / 加密、 快速乘除异或三大特性归零、不变、交换数据位段可以按 bit 分配内存适合硬件、协议、状态标记位运算是算法、嵌入式、网络编程、驱动开发的基础技能下期预告整合全书所有知识点数组、指针、结构体、动态内存、文件操作、菜单框架做成功能完整、可直接上交作业 / 课程设计的成品项目。