【算法】位运算看这一篇就够了:操作符、技巧与算法实战 📅 发布时间:2026/7/17 11:03:05 👁️ 浏览次数: 目录位运算算法详解一、基础位运算操作符二、常用位运算技巧1. 判断奇偶性2. 交换两个数不使用临时变量3. 获取二进制中第k位4. 将第k位设置为15. 将第k位设置为06. 翻转第k位7. 统计二进制中1的个数三、常见位运算算法题1. 判断一个数是否是2的幂2. 找出只出现一次的数字其他数字都出现两次3. 找出两个只出现一次的数字4. 计算两个整数的和不使用和-5. 子集枚举四、位运算的应用场景五、注意事项六、实战含题目链接位运算算法详解位运算是一种直接对整数在内存中的二进制位进行操作的低级运算由于计算机底层就是二进制位运算的效率非常高。一、基础位运算操作符操作符名称规则示例按位与两个位都是1时结果为15 3 1(0101 0011 0001)|按位或至少有一个1时结果为15 | 3 7(0101 | 0011 0111)^按位异或两个位不同时结果为15 ^ 3 6(0101 ^ 0011 0110)~按位取反0变11变0~5 -6(0101 - 1010)左移左移n位右边补05 1 10(0101 - 1010)右移右移n位正数左边补05 1 2(0101 - 0010)二、常用位运算技巧1. 判断奇偶性// 常规方法boolisOdd(intn){returnn%21;}// 位运算方法判断最低位boolisOdd(intn){returnn1;// 如果最后一位是1则是奇数}2. 交换两个数不使用临时变量voidswap(inta,intb){aa^b;ba^b;// b (a^b)^b aaa^b;// a (a^b)^a b}3. 获取二进制中第k位intgetBit(intn,intk){return(nk)1;// 右移k位后取最低位}4. 将第k位设置为1intsetBit(intn,intk){returnn|(1k);// 将1左移k位后按位或}5. 将第k位设置为0intclearBit(intn,intk){returnn~(1k);// 将1左移k位后取反再按位与}6. 翻转第k位inttoggleBit(intn,intk){returnn^(1k);// 异或1实现翻转}7. 统计二进制中1的个数// 方法1逐位判断intcountOnes(intn){intcount0;while(n){countn1;n1;}returncount;}// 方法2Brian Kernighan算法效率更高intcountOnes(intn){intcount0;while(n){n(n-1);// 消除最低位的1count;}returncount;}三、常见位运算算法题1. 判断一个数是否是2的幂boolisPowerOfTwo(intn){if(n0)returnfalse;return(n(n-1))0;// 2的幂只有一个1消除后为0}2. 找出只出现一次的数字其他数字都出现两次intsingleNumber(vectorintnums){intresult0;for(intnum:nums){result^num;// 异或运算相同为0不同为1}returnresult;}3. 找出两个只出现一次的数字vectorintsingleNumber(vectorintnums){// 先对所有数异或得到两个目标数的异或结果intxorResult0;for(intnum:nums){xorResult^num;}// 找到异或结果中最低位的1用于分组intmaskxorResult(-xorResult);// 获取最低位的1// 根据该位分组异或inta0,b0;for(intnum:nums){if(nummask){a^num;}else{b^num;}}return{a,b};}4. 计算两个整数的和不使用和-intgetSum(inta,intb){while(b!0){intcarry(ab)1;// 进位aa^b;// 不进位加法bcarry;// 循环处理进位}returna;}5. 子集枚举vectorvectorintsubsets(vectorintnums){vectorvectorintresult;intnnums.size();// 用二进制位表示每个元素选或不选for(intmask0;mask(1n);mask){vectorintsubset;for(inti0;in;i){if(mask(1i)){// 检查第i位是否为1subset.push_back(nums[i]);}}result.push_back(subset);}returnresult;}四、位运算的应用场景状态压缩用整数的二进制位表示状态节省空间权限管理用不同位表示不同权限加密解密异或运算常用于简单的加密图形学颜色值的RGB分量操作性能优化替代乘除法、取模等操作五、注意事项优先级问题位运算符优先级低于比较运算符使用时建议加括号有符号数移位右移对于负数符号位处理取决于编译器溢出风险左移可能改变符号位或导致溢出可读性适当使用必要时添加注释位运算虽然看起来复杂但掌握后能写出更高效的代码特别是在算法竞赛和底层开发中非常有用。六、实战含题目链接判断字符是否唯⼀easy丢失的数字easy两整数之和medium只出现⼀次的数字 IImedium面试题 17.19. 消失的两个数字hard
移动云能够提供哪些AI大模型方面的服务? 目前,移动云既能为用户提供AI大模型训推所需的智算算力,也能提供一站式数据、算法、工具、模型、智能体等资源与能力。以移动云一站式模型服务平台为例,该服务汇聚了优质模型、智能体,预置知识库、prompt、插件、工作流等能力&… 2026/7/17 9:10:11
对比一圈后 9个降AIGC平台深度测评,本科生如何选? 在如今的学术写作环境中,AI生成内容(AIGC)已经成为高校和科研机构重点关注的问题。对于本科生而言,论文中的AI痕迹不仅可能影响查重率,还可能被系统判定为学术不端行为,进而影响成绩甚至毕业。因此… 2026/7/17 2:41:33
IPython Parallel实战:从本地多核到远程集群的并行计算 2012年,Knight Capital因一次未审查的集群升级损失4.62亿美元;2010年,Skype因一处局部过载引发全球24小时宕机。在享受集群算力红利前,你的系统真的准备好应对雪崩了吗? IPython Parallel 为科研和工程提供了一条从本地多核平滑过渡到远程集群的捷径,但底层 ZeroMQ 没有… 2026/7/17 11:02:51
多场景音乐播放系统开发:从音频处理到后台播放优化 在实际开发音乐类应用或音视频处理项目时,背景音乐、冥想音乐、放松音乐、睡眠音乐、助眠音乐和深度睡眠音乐是常见的功能需求。这些音乐类型虽然听起来相似,但在技术实现上涉及音频文件管理、播放控制、音效处理、循环策略和用户体验等多个层面。很多开… 2026/7/17 11:00:51
Ubuntu 26.04 LTS桌面版安装与配置全指南 1. Ubuntu桌面系统初体验:从安装到日常使用 作为一名长期使用Windows系统的开发者,第一次接触Ubuntu桌面版时确实有些手足无措。记得2018年我为了搭建深度学习环境第一次安装Ubuntu 18.04 LTS,从启动U盘制作到分区设置,每一步都小… 2026/7/17 10:58:49
企业微信API二次开发:海量消息推送的动态速率整形与分布式限流实战 参考文档 在基于企业微信进行私域运营或内部协同办公的场景中,“消息下发(Message Push)”是系统主动触达用户的最核心管道。无论是通过外部联系人接口群发大促活动海报,还是利用应用消息接口向全员推送紧急的系统公告,… 2026/7/17 10:56:49
OpenCoWork:基于Claude Agent SDK的AI协同工作平台 1. 项目概述:重新定义AI协作的OpenCoWork 在AI技术爆发的当下,大多数人对AI助手的认知仍停留在"智能聊天框"阶段——输入问题,获取回答,如此往复。这种交互模式极大限制了AI的生产力价值。OpenCoWork的出现彻底打破了这… 2026/7/17 10:54:48
FPGA开发板UDP通信问题排查与优化 1. 盘古50K开发板UDP通信问题背景 第一次拿到紫光同创PGL50H开发板时,我像大多数工程师一样,迫不及待地想测试它的网络性能。这块基于Logos系列FPGA的核心板标称支持千兆以太网,硬件规格相当亮眼:采用484球BGA封装,内置… 2026/7/17 10:54:48
【WPS AI表格避坑白皮书】:实测发现87%用户正在误用AI函数——这5个致命错误导致结果偏差超42% 更多请点击: https://intelliparadigm.com 第一章:WPS AI表格的核心能力与适用边界 WPS AI表格将大语言模型能力深度集成于电子表格环境中,实现从自然语言指令到结构化数据操作的端到端转化。其核心并非替代传统公式或宏编程,而是… 2026/7/17 0:00:08
Cursor终端插件生态避坑指南:23个实测低效插件黑名单,附3个自研轻量替代方案 更多请点击: https://intelliparadigm.com 第一章:Cursor终端插件生态避坑指南概览 Cursor 作为基于 VS Code 内核构建的 AI 原生编辑器,其终端插件生态虽活跃,但存在兼容性断层、权限策略突变与调试链路断裂等典型风险。开发者常… 2026/7/17 0:00:08
ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 更多请点击: https://codechina.net 第一章:ChatGPT写作提示词效率革命:单条提示词响应质量提升3.8倍的关键变量(附可复用提示词矩阵表) 提示词工程已从经验试错迈入变量驱动的科学阶段。实证研究表明,影响… 2026/7/17 0:00:08
Git reset 与 revert 深度对比:5个关键差异与 3 种典型应用场景 Git Reset 与 Revert 深度对比:5个关键差异与3种典型应用场景在团队协作开发中,代码版本管理如同行走钢丝——一步失误可能导致整个项目陷入混乱。作为Git进阶用户,你是否曾在深夜面对错误的提交束手无策?是否在强制推送后收到同事… 2026/7/17 0:28:39
GitHub 学生包申请避坑:5个常见失败原因与开发者工具调试方案 GitHub 学生包申请技术排障指南:5个高频失败场景与开发者工具实战方案第一次尝试申请GitHub学生包时,我盯着屏幕上那个不断转圈的加载动画整整15分钟,最终只等来了一行冰冷的错误提示。这可能是许多开发者共同的经历——明明按照教程操作&… 2026/7/17 6:02:24
冒烟测试用例设计规范:5%-10%覆盖率下的3类核心场景与执行标准 冒烟测试用例设计的黄金法则:5%-10%覆盖率下的精准筛选策略在快节奏的敏捷开发环境中,冒烟测试作为质量保障的第一道防线,其重要性不言而喻。当测试资源有限而时间紧迫时,如何从海量测试用例中精准筛选出那关键的5%-10%࿰… 2026/7/16 12:08:13