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

C语言位操作技巧,看完让你代码更专业

位操作是一种对二进制位进行操作的方式,通过按照位(bit)进行操作。

在C语言中,位操作是指直接对二进制数的位进行操作的一类运算。位操作可以用于修改、清除、切换和检查整型变量的特定位;在嵌入式环境下可以用于对硬件寄存器进行修改,也可以合并状态位用位字段(bit)来管理数据,降低空间占用,因此在一些对性能要求较高的场景下,位操作是一种非常有用的工具。

位操作运算符

对于位操作运算符,主要包含与(&)、或(|)、异或(^)、取反(~)、左移()等操作,这些运算符的功能如下所示。

上述就是主要位操作支持的运算符,下面以格式和例子进行说明。

位操作运算符与`&`

`&`运算符用于对两个操作数的对应位进行与操作,在操作时会对相应位执行与操作,只有当对应位都为1时,结果位才为1,否则为0。

对于与操作,其处理相当于按照位一个个进行处理,每个位都按照或的规则最终输出数据;具体可参考下图所示。

其格式和示例如下所示。

// 与(&)操作格式 A & B // 与(&)操作示例,0b开头表示二进制数 int a = 0b1010; // 10 int b = 0b1100; // 12 int c = a & b; // 0b1000, 8 // 与(&)操作示例,0x开头表示十六进制数 int a = 0x03; // 0b00000011 int b = 0xc1; // 0b11000001 int c = a & b; // 0b00000001, 1

位操作运算符或`|`

`|`运算符用于对两个操作数的对应位进行或操作,在操作时会对相应位执行或操作,只要对应位有一个为1时,结果位就为1,否则为0。

对于或操作,其处理相当于按照位一个个进行处理,每个位都按照或的规则最终输出数据;具体可参考下图所示。

其格式和示例如下所示。

// 或(|)操作格式 A | B // 或(|)操作示例,0b开头表示二进制数 int a = 0b1010; // 0xa int b = 0b1100; // 0xc int c = a | b; // 0b1110, 0xe // 或(|)操作示例,0x开头表示十六进制数 int a = 0x03; // 0b00000011 int b = 0xc1; // 0b11000001 int c = a | b; // 0b11000011, 195

位操作运算符`^`

`^`运算符用于对两个操作数的对应位进行异或操作,在操作时会对相应位执行异或操作,只有当对应位不同时,结果位才为1,否则为0。

对于异或操作,其处理相当于按照位一个个进行异或处理,具体可参考下图所示。

其格式和示例如下所示。

// 异或(^)操作格式 A ^ B // 异或(^)操作示例,0b开头表示二进制数 int a = 0b1010; // 0xa int b = 0b1100; // 0xc int c = a ^ b; // 0b0110, 6 // 异或(^)操作示例,0x开头表示十六进制数 int a = 0x03; // 0b00000011 int b = 0xc1; // 0b11000001 int c = a ^ b; // 0b11000010, 194

位操作运算符`~`

`~`运算符用于对操作数的每个位进行取反操作,在操作时会对相应位执行取反操作,0改为1,1改为0。

对于取反运算符,其处理相当于按照位一个个进行取反处理,具体可参考下图所示。

其格式和示例如下所示。

// 取反(~)操作格式 ~A // 取反(~)操作示例,0b开头表示二进制数 int a = 0b1010; // 0xa int b = ~a; // 0b0101, 5 // 取反(~)操作示例,0x开头表示十六进制数 int a = 0x03; // 0b00000011 int b = ~a; // 0b11111100, 0xfc

位操作运算符左移和右移

左移和右移运算符用于对操作数按照位进行移动,左移运算时,高位丢弃,低位补0;右移运算时,高位补符号位,低位丢弃;

对于移位运算符,具体可参考下图所示。

其格式和示例如下所示。

// 左移运算符 a << nums; // 右移运算符 a >> nums; // 左移和右移运算符示例 int a = 0x0F; // 0b00001111 int b = a >> 2; // 0b00000011, 0x03 int c = a << 2; // 0b00111100, 0x3c
http://www.jsqmd.com/news/912968/

相关文章:

  • Flutter GoRouter 路由导航详解
  • 网盘直链解析终极指南:一键解锁高速下载体验
  • 3个核心功能彻底解决Windows C盘爆红问题:开源工具Windows Cleaner深度解析
  • 如何快速解锁QQ音乐加密文件:qmcdump音频解密工具终极指南
  • 微信视频号直播数据抓取终极指南:5分钟搭建专业级监控系统
  • 2026年横评10款降AI率工具:一键锁定高效助手! - 降AI小能手
  • 论文开题报告怎么写呀?
  • 179、运动控制中的行业标准:机器人安全标准ISO 10218
  • Prompt Engineering 深度解析:从 Few-shot 到结构化提示的系统化方法
  • 基于STM32的多功能万年历电子闹钟设计与实现
  • 告别PuTTY!Win10/Server 2019自带的OpenSSH客户端,这样用才顺手
  • 2025-2026年全球留香沐浴露品牌推荐:十大口碑产品评测约会前提升魅力价格注意事项 - 品牌推荐
  • 从“事后Debug”到“事前防御”:聊聊C#代码契约(Code Contracts)与Assert断言的配合使用
  • 【Agent智能体10 | 反思设计模式-AI数据分析的可视化实战】
  • 【单射频链束训练】对具有1个射频链的OFDM-MIMO系统进行束扫描研究附Matlab代码
  • 忘记压缩包密码怎么办?3步教你用专业工具快速找回
  • 别再死磕Vivado了!用VSCode写ZYNQ代码,效率翻倍的保姆级配置指南
  • CentOS 7.6下Mellanox网卡驱动升级避坑指南:从依赖安装到模块冲突解决
  • 植物大数据平台技术解析与品牌选型参考指南:新疆本地做智慧农业、数字农业的公司/新疆棉花智慧农业企业有哪些?/新疆棉花种植用的植物监测传感器企业/选择指南 - 优质品牌商家
  • 专业级AVIF图像插件:Photoshop高效图像压缩完整解决方案
  • ROS2跨机通信真就这么简单?用DDS和ROS_DOMAIN_ID轻松隔离你的机器人网络
  • WarcraftHelper魔兽争霸III优化工具:5分钟解锁游戏全部潜力,告别老旧限制
  • 多 Agent 对证循环协作架构:Hermes + Claude Code + Codex 三角色工作流实战
  • 房地产咨询 Agent:房源匹配 Harness
  • 你的Zotero文献语言设置对了吗?GB/T 7714样式下,让英文文献正确显示‘et al.’的完整配置流程
  • AI 模型推理服务部署深度解析:从 Triton 到 vLLM 的生产级推理架构
  • Arm CCI-550/CCI-500地址通道带宽异常分析与优化
  • 如何选留香沐浴露品牌?2026年5月推荐TOP10对比香气持久案例适用场景 - 品牌推荐
  • 成都及四川EPS泡沫板服务机构排行:南充市,广安市,雅安市,檐口线条、石膏装饰线条、自建房外墙线条、EPS浮雕线条选择指南 - 优质品牌商家
  • 这6个动作让python selenium爬虫规避检测