首页 > 后端开发 > C++ > 正文

c++怎么进行位运算操作_c++位运算符的种类与实际应用举例

冰火之心
发布: 2025-11-04 12:15:13
原创
976人浏览过
位运算通过操作二进制位提升效率,C++支持6种位运算符:&(与)、|(或)、^(异或)、~(取反)、<<(左移)、>>(右移);常用于检测、设置、清除、翻转特定位,实现快速乘除2的幂,交换数值及统计1的个数等场景,广泛应用于性能敏感领域。

c++怎么进行位运算操作_c++位运算符的种类与实际应用举例

在C++中,位运算操作是对整数类型数据的二进制位进行直接操作的技术,常用于优化性能、处理底层数据或实现特定算法。它比常规算术运算更快,在嵌入式系统、算法竞赛和系统编程中广泛应用。

1. C++中的位运算符种类

C++提供了6种基本的位运算符,适用于整型数据(如int、char、unsigned等):

  • &:按位与(AND)——对应位都为1时结果为1
  • |:按位或(OR)——对应位至少一个为1时结果为1
  • ^:按位异或(XOR)——对应位不同时为1
  • ~:按位取反(NOT)——每一位0变1、1变0
  • <<:左移——将二进制位向左移动,右边补0
  • >>:右移——将二进制位向右移动,左边补符号位(有符号)或0(无符号)

示例说明:

假设 a = 5(二进制 00000101),b = 3(二进制 00000011):

立即学习C++免费学习笔记(深入)”;

  • a & b → 00000001 = 1
  • a | b → 00000111 = 7
  • a ^ b → 00000110 = 6
  • ~a → 11111010(取决于数据类型长度)
  • a << 1 → 00001010 = 10(相当于乘以2)
  • a >> 1 → 00000010 = 2(相当于除以2)

2. 常见实际应用场景举例

位运算不只是理论知识,它在很多实际场景中有高效用途。

判断某位是否为1

使用“与”操作可以检测某个特定位是否被设置。

例如:判断第n位(从0开始)是否为1:

bool isBitSet(int num, int n) {
    return (num & (1 << n)) != 0;
}
登录后复制

比如 isBitSet(5, 0) → true(因为5是101,第0位是1)

设置某一位为1

使用“或”操作可以开启某一位。

int setBit(int num, int n) {
    return num | (1 << n);
}
登录后复制

setBit(4, 0) → 5(把100变成101)

清除某一位为0

使用“与”配合取反来清零指定位置。

Rose.ai
Rose.ai

一个云数据平台,帮助用户发现、可视化数据

Rose.ai 74
查看详情 Rose.ai
int clearBit(int num, int n) {
    return num & ~(1 << n);
}
登录后复制

clearBit(7, 1) → 5(把111变成101)

翻转某一位

用“异或”可以切换某一位的状态(1变0,0变1)。

int toggleBit(int num, int n) {
    return num ^ (1 << n);
}
登录后复制

toggleBit(5, 2) → 1(101 变成 001)

快速乘除2的幂

左移相当于乘以2的幂,右移相当于整除2的幂(对非负数有效)。

  • x << n → x * (2^n)
  • x >> n → x / (2^n)(向下取整)

例如:x << 3 相当于 x * 8;x >> 2 相当于 x / 4

交换两个数不用临时变量

利用异或的性质:a ^ a = 0,a ^ 0 = a。

int a = 5, b = 3;
a = a ^ b;
b = a ^ b;  // b = (a^b)^b = a
a = a ^ b;  // a = (a^b)^a = b
登录后复制

最终a=3,b=5。但此方法实用性有限,可读性较差,建议仅作了解。

统计二进制中1的个数(汉明重量)

常用技巧:每次执行 n & (n-1) 会清除最右边的1。

int countOnes(int n) {
    int count = 0;
    while (n) {
        n &= (n - 1);
        count++;
    }
    return count;
}
登录后复制

比如 n=7(111),循环3次,返回3。

小结

位运算是一种强大而高效的工具,掌握它可以提升代码性能并简化某些逻辑判断。虽然现代编译器会自动优化部分操作,但在需要精确控制或追求极致效率的场合,手动使用位运算仍然非常有价值。理解每种运算符的行为和常见技巧,有助于写出更精炼的C++代码。

基本上就这些核心内容,多练习几个位操作题目(如LeetCode上的相关题)会更容易掌握。

以上就是c++++怎么进行位运算操作_c++位运算符的种类与实际应用举例的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号