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

Linux C:位运算符

一、位运算符

位运算符直接操作数据的二进制位,适用于底层硬件操作、数据压缩、状态控制等场景,效率极高。

1. 基本运算符功能

运算符名称功能说明
&按位与对应位均为 1 则为 1,否则为 0(可用于清位、取位)
|按位或对应位有一个为 1 则为 1,否则为 0(可用于置位)
^按位异或对应位不同则为 1,相同则为 0(可用于交换变量、加密)
~按位取反0 变 1,1 变 0(注意:对有符号数操作会涉及补码,结果可能为负数)
<<左移数据左移 n 位,右边补 0(等价于数据 * 2^n,注意溢出)
>>右移数据右移 n 位,左边补符号位(有符号数,算术右移)或补 0(无符号数,逻辑右移),等价于数据 / 2^n(整数除法)

&按位与:与00| 按位或:或11

^异或:相同为0,相异为1
<<左移:让数据变大,等价于 * 2^n
>>右移:让数据缩小,等价于 / 2^n
^异或:可以实现不使用第三方变量完成两个数的交换

2. 常用操作

  • 置位(将第 n 位置为 1)num |= (1 << n);(n 从 0 开始,如置第 3 位:num |= 1<<3;
  • 清位(将第 n 位置为 0)num &= ~(1 << n);(如清第 2 位:num &= ~(1<<2);
  • 取位(判断第 n 位是否为 1)if (num & (1 << n)) { ... }
  • 异或交换变量(无需临时变量)
    int a = 3, b = 5;
    a ^= b;  // a = 3^5 = 6
    b ^= a;  // b = 5^6 = 3(原a的值)
    a ^= b;  // a = 6^3 = 5(原b的值)异或特性:
    a ^ a = 0,a ^ 0 = a,a ^ b ^ b = a

位运算符优先级:

移位运算符优先级高于其余位运算符
使用场景:
将一个数据第n位置1
num |= (1 << n);
将一个数据某位置0:
num &= ~(1 << n);

注意:

左移溢出:无符号数左移超出位数后高位丢失(如 8 位无符号数 0xff << 1 结果为 0xfe);有符号数左移可能导致符号改变(如 int 型 0x40000000 << 1 会变为负数) 

http://www.dtcms.com/a/305528.html

相关文章:

  • 【前端】span和div都设置了text-align,为什么对span不起作用
  • python基础语法1,python语法元素(简单易上手的python语法教学)(课后习题)
  • 操作系统- lecture3(进程的定义)
  • LVS (Linux Virtual Server) 解析
  • 微服务消息队列之——RabbitMQ
  • 2019 年 NOI 最后一题题解
  • 智能AI医疗物资/耗材管理系统升级改造方案分析
  • Python自动化测试环境搭建
  • Linux虚拟内存
  • Spring AOP详细解析
  • 基于deepseek的事件穿透分析-风险传导图谱
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(六)
  • Tomcat线程池、业务线程池与数据库连接池的层级约束关系解析及配置优化
  • 在Trae中使用MoonBit月兔
  • 《Computational principles and challenges in single-cell data integration》
  • Map 集合
  • vue 使用postcss-pxtorem 实现适老化
  • Elasticsearch 基础速成 5 步跑通索引、文档、映射与查询
  • 【php 安装 xdebug】
  • 数学建模——最大最小化模型
  • 关于mysql时间类型和java model的日期类型映射
  • anaconda和Miniconda安装包32位64位皆可,anaconda和Miniconda有什么区别?
  • 【33】C# WinForm入门到精通 ——表格布局器TableLayoutPanel【属性、方法、事件、实例、源码】
  • JetBrains Annotations:从入门到落地,彻底告别 NullPointerException
  • Vue路由钩子完全指南
  • Linux ARM 平台 C 语言操作 Excel 文件的常用库与工具汇总(支持 xls 和 xlsx)
  • 【 建模分析回顾】[MultiOutputClassifier]MAP - Charting Student Math Misunderstandings
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-51,(知识点:stm32,GPIO基础知识)
  • Java stream 并发问题
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(二级)