当前位置: 首页 > 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.zskr.cn/news/1424280.html

相关文章:

  • Arduino Nano与DFPlayer打造光之宝石音乐盒:从电路设计到3D打印的完整创客教程
  • 论文开题报告怎么写呀?
  • 【单射频链束训练】对具有1个射频链的OFDM-MIMO系统进行束扫描研究附Matlab代码
  • 忘记压缩包密码怎么办?3步教你用专业工具快速找回
  • CentOS 7.6下Mellanox网卡驱动升级避坑指南:从依赖安装到模块冲突解决
  • 植物大数据平台技术解析与品牌选型参考指南:新疆本地做智慧农业、数字农业的公司/新疆棉花智慧农业企业有哪些?/新疆棉花种植用的植物监测传感器企业/选择指南 - 优质品牌商家
  • 房地产咨询 Agent:房源匹配 Harness
  • 成都及四川EPS泡沫板服务机构排行:南充市,广安市,雅安市,檐口线条、石膏装饰线条、自建房外墙线条、EPS浮雕线条选择指南 - 优质品牌商家
  • 揭秘Claude情感曲线异常波动:5步精准定位Prompt情绪失焦根源并实时校准
  • AI实战之小程序-别急着写页面,先把Uniapp工程骨架搭稳
  • 2026年5月25-30万五座SUV车型推荐:TOP5排名专业评测价格注意事项 - 品牌推荐
  • Claude解析LP问题失败?深度拆解7类语法歧义、约束冲突与目标函数坍塌场景,附可复现Notebook
  • 基于树莓派Pico 2与CircuitPython的MIDI合成器与控制器开发实战
  • 全变更蒸馏:让AI编程成为一个可进化的系统
  • Lindy自动化筛简历到底准不准?深度拆解NLP匹配算法+真实招聘数据验证(准确率92.7%实测报告)
  • 短视频矩阵获客系统的设计与实践:提升企业数字营销效率的路径
  • Bootstrap 4 Flex布局深度解析
  • 2026年5月北京定制游旅行社推荐:口碑好的服务解决家庭游行程规划复杂痛点 - 品牌推荐
  • 基于CircuitPython与BLE的智能进球庆祝装置DIY全攻略
  • 2026年防静电周转车技术选型与专业供应商解析:不锈钢货物架/加厚不锈钢平板手推车/实验室不锈钢推车/重型不锈钢货物推车/选择指南 - 优质品牌商家
  • 2026年毛绒玩具静音安抚款推荐:五家优选品牌深度解析 - 科技焦点
  • 基于Arduino与逻辑门电路的家庭安防系统设计与实现
  • 手把手教你用Obsidian Day Planner插件,把微信读书笔记和每日TODO无缝打通
  • 避坑指南 上下文膨胀怎么治 摘要策略和信息优先级队列
  • 2026年5月25-30万五座SUV车型推荐:五款专业评测对比价格特点适用场景 - 品牌推荐
  • 2026年仓储货架厂家TOP5排行:四川至实仓储设备有限公司联系、四川货架定制、密集型货架、库房货架、成都本地货架厂家电话选择指南 - 优质品牌商家
  • 打工人实用参考!优质项目汇报PPT制作工具汇总
  • Kubernetes分布式追踪与链路分析:实现全链路可观测性
  • 如何快速下载百度文库等30+平台文档:终极免费文档获取指南
  • FEMTO-ST轴承数据集深度使用指南:避开新手处理振动信号的5个常见坑