文章目录
须知
💬 欢迎讨论:如果你在学习过程中有任何问题或想法,欢迎在评论区留言,我们一起交流学习。你的支持是我继续创作的动力!
👍 点赞、收藏与分享:觉得这篇文章对你有帮助吗?别忘了点赞、收藏并分享给更多的小伙伴哦!你们的支持是我不断进步的动力!
🚀 分享给更多人:如果你觉得这篇文章对你有帮助,欢迎分享给更多对C++算法感兴趣的朋友,让我们一起进步!
接上篇:【优选算法篇】位运算小课堂:从入门到精通的奇妙之旅(上篇)-CSDN博客
引言:通过上篇文章带大家简单了解“位运算算法”,小试牛刀。接下来将让大家感受一下位运算在解题的妙处。
高效与基础
- 位运算直接操作二进制位,具有高效、低级别、常数时间复杂度的特性,是算法优化的重要工具。
考察重点
- 面试中常考查位运算基础知识、位运算性质 和 实际应用场景,例如:
- 异或:去重、找唯一元素。
- 与/或:掩码操作、特定位判断。
- 移位:快速乘除以2的幂。
典型题型
- 找出唯一数:数组中一个数出现一次,其他数出现两次/三次。
- 判断奇偶:通过
num & 1
。- 位掩码:权限管理、分组操作。
- 优化求和:连续数组求和、K次出现问题。
面试中的价值
- 考察代码功底:理解位运算需要扎实的基础。
- 解决实际问题:在性能敏感场景中,位运算常用于算法优化。
- 考察思维能力:巧妙运用位运算解决复杂问题,体现编程思维的灵活性。
总结:掌握位运算不仅可以帮助快速通过面试常见题型,更能展示对计算机底层机制的理解和高效解决问题的能力。
前言
位运算是计算机程序设计中的基础且高效的运算方式,直接对二进制位进行操作,适合解决性能敏感场景下的复杂问题。
- 底层原理:计算机内部数据存储是二进制的,因此位运算直接作用于二进制位,执行速度极快。
- 应用广泛:在算法优化、数据压缩、权限管理、位图处理等场景中,位运算具有不可替代的优势。
"位运算算法:从基础到高级场景的全面解析"
1. C++ 位运算算法 进阶详解
1.1 位运算概念
位运算是对整数的二进制表示进行按位操作的运算,包括:
基本运算
-
按位与(&)
- 规则:两个二进制位都为
1
,结果为1
,否则为0
。 - 应用:用于清零、掩码操作、判断奇偶。
- 示例:
5 & 3 = 0101 & 0011 = 0001 (1)
- 示例:
- 规则:两个二进制位都为
-
按位或(|)
- 规则:两个二进制位中只要有一个为
1
,结果为1
。 - 应用:用于设置特定位为1。
- 示例:
5 | 3 = 0101 | 0011 = 0111 (7)
- 示例:
- 规则:两个二进制位中只要有一个为
-
按位异或(^)
- 规则:两个二进制位相同为
0
,不同为1
。 - 应用:用于找不同、交换变量、去重。
- 示例:
5 ^ 3 = 0101 ^ 0011 = 0110 (6)
- 示例:
- 规则:两个二进制位相同为
-
按位取反(~)
- 规则:将二进制位的
0
变1
,1
变0
。 - 应用:求补码、快速清零。
- 示例:
~5 = ~0101 = 1010
(假设4位)
- 示例:
- 规则:将二进制位的
-
左移(<<)
- 规则:将二进制位向左移动指定位置,右边补
0
。 - 应用:快速计算
x * 2^n
。- 示例:
5 << 1 = 0101 << 1 = 1010 (10)
- 示例:
- 规则:将二进制位向左移动指定位置,右边补
-
右移(>>)
- 规则:将二进制位向右移动指定位置。
- 算术右移:高位用符号位填充(保持正负性)。
- 逻辑右移:高位补0。
- 应用:快速计算
x / 2^n
。- 示例:
5 >> 1 = 0101 >> 1 = 0010 (2)
- 示例:
- 规则:将二进制位向右移动指定位置。