位运算:从基础到实战,解锁高效编程的底层密码
1. 什么是位运算位运算Bitwise Operation是直接对整数在内存中的二进制位bit进行操作的一种运算方式。与常规的算术运算加减乘除不同位运算直接操作数据的底层二进制表示因此执行效率极高是编写高性能、低资源消耗代码的利器。在计算机中所有数据最终都以二进制形式存储。位运算让我们能够像操作开关一样精确地控制每一个二进制位0或1从而实现一些巧妙的算法和优化。2. 六大基本位运算符掌握位运算首先要理解以下六个核心运算符2.1 按位与规则两个位都为1时结果才为1否则为0。示例int a 5; // 二进制0101 int b 3; // 二进制0011 int result a b; // 结果0001 (十进制1) // 计算过程 // 0101 (5) // 0011 (3) // ---- // 0001 (1)常见用途判断奇偶(n 1) 0为偶数(n 1) 1为奇数取特定位value mask可以提取mask中为1的位清零特定位value ~mask可以将mask中为1的位清零2.2 按位或|规则两个位中只要有一个为1结果就为1。示例int a 5; // 0101 int b 3; // 0011 int result a | b; // 0111 (十进制7) // 计算过程 // 0101 (5) // | 0011 (3) // ---- // 0111 (7)常见用途设置特定位为1value | mask可以将mask中为1的位设置为1合并标志位多个布尔标志可以用一个整数的不同位表示2.3 按位异或^规则两个位不同时结果为1相同时结果为0。重要特性任何数与0异或等于本身a ^ 0 a任何数与自身异或等于0a ^ a 0满足交换律和结合律a ^ b b ^ a(a ^ b) ^ c a ^ (b ^ c)示例int a 5; // 0101 int b 3; // 0011 int result a ^ b; // 0110 (十进制6) // 计算过程 // 0101 (5) // ^ 0011 (3) // ---- // 0110 (6)常见用途交换两个数a a ^ b; b a ^ b; a a ^ b;找出现奇数次的数在一组数中只有一个数出现奇数次其他都出现偶数次加密解密用同一个密钥异或两次得到原文2.4 按位取反~规则将每一位取反0变11变0。注意在Java等有符号整数语言中取反操作包括符号位。示例int a 5; // 0000 0000 0000 0000 0000 0000 0000 0101 int result ~a; // 1111 1111 1111 1111 1111 1111 1111 1010 (十进制-6) // 这是补码表示实际值为-6常见用途创建掩码~0得到所有位都是1的数-1配合与运算清零特定位2.5 左移规则将二进制位全部向左移动指定位数低位补0。数学意义a n相当于a × 2ⁿ在不溢出的情况下。示例int a 5; // 0101 int result a 2; // 010100 (十进制20) // 相当于 5 × 2² 20常见用途快速乘以2的幂设置标志位1 n创建只有第n位为1的掩码2.6 右移 和 算术右移带符号右移高位补符号位正数补0负数补1。逻辑右移无符号右移高位总是补0。示例int a 8; // 1000 int b -8; // 1111 1111 1111 1111 1111 1111 1111 1000 int r1 a 2; // 0010 (2) 算术右移 int r2 a 2; // 0010 (2) 逻辑右移正数相同 int r3 b 2; // 1111 1111 1111 1111 1111 1111 1111 1110 (-2) int r4 b 2; // 0011 1111 1111 1111 1111 1111 1111 1110 (很大的正数)常见用途快速除以2的幂算术右移提取高位信息无符号处理逻辑右移3. 位运算的实战应用3.1 权限控制系统使用位运算实现简洁高效的权限控制public class PermissionSystem { // 定义权限常量使用2的幂次方 public static final int READ 1 0; // 0001 public static final int WRITE 1 1; // 0010 public static final int DELETE 1 2; // 0100 public static final int ADMIN 1 3; // 1000 private int permissions 0; // 添加权限 public void addPermission(int perm) { permissions | perm; } // 移除权限 public void removePermission(int perm) { permissions ~perm; } // 检查是否有权限 public boolean hasPermission(int perm) { return (permissions perm) ! 0; } // 检查是否只有指定权限没有其他权限 public boolean hasOnlyPermission(int perm) { return permissions perm; } // 切换权限有则移除无则添加 public void togglePermission(int perm) { permissions ^ perm; } }3.2 判断2的幂判断一个正整数是否是2的幂如1, 2, 4, 8, 16...public boolean isPowerOfTwo(int n) { // 2的幂的二进制表示只有一个1 // 例如8 10007 0111 // n (n-1) 会消去最低位的1 return n 0 (n (n - 1)) 0; }3.3 计算二进制中1的个数统计一个整数二进制表示中1的个数汉明重量public int countBits(int n) { int count 0; while (n ! 0) { n (n - 1); // 每次消去最低位的1 count; } return count; } // 或者使用内置方法Java public int countBitsBuiltin(int n) { return Integer.bitCount(n); }3.4 交换两个变量的值不使用临时变量public void swap(int a, int b) { a a ^ b; b a ^ b; // b (a ^ b) ^ b a a a ^ b; // a (a ^ b) ^ a b System.out.println(a a , b b); }3.5 找唯一出现一次的数字LeetCode经典题目给定一个非空整数数组除了某个元素只出现一次以外其余每个元素均出现两次。找出那个只出现了一次的元素。public int singleNumber(int[] nums) { int result 0; for (int num : nums) { result ^ num; // 利用 a ^ a 0 的特性 } return result; }4. 位运算的性能优势位运算之所以高效主要有以下几个原因硬件级支持CPU有专门的位运算指令执行速度极快内存访问少一次操作处理多个位减少内存访问次数无分支预测避免if-else等分支语句减少分支预测失败的开销并行处理可以同时对多个位进行操作性能对比示例// 传统方法判断奇偶 boolean isEven1(int n) { return n % 2 0; // 涉及除法运算 } // 位运算判断奇偶 boolean isEven2(int n) { return (n 1) 0; // 只需一次与运算 } // 测试表明位运算版本通常快2-5倍5. 注意事项与最佳实践5.1 优先级问题位运算符的优先级通常低于比较运算符使用时建议加括号// 错误先计算 1 1再与a进行与运算 if (a 1 1) { ... } // 正确明确优先级 if ((a 1) 1) { ... }5.2 符号扩展右移操作时要注意符号扩展问题特别是处理负数时byte b -1; // 11111111 int i b 4; // 算术右移11111111 11111111 11111111 11111111 (-1) int j b 4; // 逻辑右移00001111 11111111 11111111 11111111 (很大的正数)5.3 可读性与维护性虽然位运算高效但可读性较差。建议为复杂的位运算添加详细注释使用有意义的常量名代替魔数考虑使用枚举或常量类管理标志位在性能关键路径使用位运算其他情况优先考虑可读性5.4 平台兼容性不同语言、不同平台对位运算的实现可能有细微差异Java中整数固定为32位移位超过31位会取模C/C中移位超过位数是未定义行为Python整数无固定位数移位不会溢出6. 总结位运算作为编程中的屠龙技虽然日常开发中使用频率不高但在以下场景中不可或缺性能优化加密算法、压缩算法、图形处理系统编程操作系统内核、设备驱动、网络协议算法竞赛状态压缩、位掩码、快速幂嵌入式开发寄存器操作、硬件控制掌握位运算不仅能写出更高效的代码更能深入理解计算机底层的工作原理。建议从简单的应用开始练习逐步掌握这种强大的编程工具。学习建议理解二进制、原码、反码、补码的概念手动计算几个位运算的例子加深理解尝试用位运算解决LeetCode上的相关题目在实际项目中寻找可以使用位运算优化的场景

相关新闻

《MySQL 必知必会》核心实战技能评测大纲

《MySQL 必知必会》核心实战技能评测大纲

① 账号权限体系与安全基线参数解析 在数据库运维的实战中,安全永远是第一道防线。很多初学者容易犯的一个错误就是长期使用 root 账号进行日常开发或查询操作,这无异于将大门钥匙挂在门把手上。MySQL 的安全基石在于“最小权限原则”:用户只能拥有完成其工作所必需的最低限…

2026/8/7 13:00:06 阅读更多 →
【YOLO改进实验】探究“CA注意力机制”在YOLOv8n中的最佳嵌入位置:珊瑚礁白化检测实验

【YOLO改进实验】探究“CA注意力机制”在YOLOv8n中的最佳嵌入位置:珊瑚礁白化检测实验

一、前言 为提升水下珊瑚礁(白化/死亡/健康)检测精度,本实验在YOLOv8n网络中引入CA注意力机制。通过将CA(Coordinate Attention)模块嵌入不同位置(骨干网浅、中、深层及颈部),对比分…

2026/8/7 13:00:06 阅读更多 →
如何用独立截图工具将工作效率提升3倍:从信息捕获到智能处理的完整解决方案

如何用独立截图工具将工作效率提升3倍:从信息捕获到智能处理的完整解决方案

如何用独立截图工具将工作效率提升3倍:从信息捕获到智能处理的完整解决方案 【免费下载链接】QQScreenShot 电脑QQ截图工具提取版,支持文字提取、图片识别、截长图、qq录屏。默认截图文件名为ScreenShot日期 项目地址: https://gitcode.com/gh_mirrors/qq/QQScree…

2026/8/7 13:00:06 阅读更多 →

最新新闻

OpenClaw预装Skill解析:从AI智能体基础能力到自定义开发实战

OpenClaw预装Skill解析:从AI智能体基础能力到自定义开发实战

1. 项目概述:从“预装”说起,理解OpenClaw的设计哲学 最近在折腾OpenClaw,一个挺有意思的开源AI智能体框架。很多朋友在部署完、兴冲冲地打开Web界面后,第一反应往往是:“咦,怎么已经预装了好几个Skill&…

2026/8/7 13:40:25 阅读更多 →
颠覆性体验:Poly Haven Assets如何重新定义Blender资源管理范式

颠覆性体验:Poly Haven Assets如何重新定义Blender资源管理范式

颠覆性体验:Poly Haven Assets如何重新定义Blender资源管理范式 【免费下载链接】polyhavenassets A Blender add-on to integrate our assets natively in the asset browser 项目地址: https://gitcode.com/gh_mirrors/po/polyhavenassets 当3D艺术家面对海…

2026/8/7 13:40:25 阅读更多 →
从足球到代码:超越英雄叙事,构建技术团队的系统性能力

从足球到代码:超越英雄叙事,构建技术团队的系统性能力

那天晚上,我盯着屏幕,看着阿根廷队又一次在关键比赛中倒下,社交媒体上瞬间被“蓝白铁血难救主”和“阿根廷输了梅西没输”这两种声音淹没。作为一个看了十几年球,也写了十几年技术博客的人,我忽然觉得,这个…

2026/8/7 13:40:25 阅读更多 →
MAA明日方舟自动化助手:如何用AI解放90%的游戏重复操作时间

MAA明日方舟自动化助手:如何用AI解放90%的游戏重复操作时间

MAA明日方舟自动化助手:如何用AI解放90%的游戏重复操作时间 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https:…

2026/8/7 13:40:25 阅读更多 →
Ryujinx:开源Switch模拟器终极指南 - 5分钟掌握4000+游戏兼容性

Ryujinx:开源Switch模拟器终极指南 - 5分钟掌握4000+游戏兼容性

Ryujinx:开源Switch模拟器终极指南 - 5分钟掌握4000游戏兼容性 【免费下载链接】Ryujinx 用 C# 编写的实验性 Nintendo Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/ry/Ryujinx Ryujinx是一款用C#编写的开源Nintendo Switch模拟器&#xf…

2026/8/7 13:40:25 阅读更多 →
Redis命令行操作繁琐低效?RESP.app可视化智能管理让Redis操作一目了然

Redis命令行操作繁琐低效?RESP.app可视化智能管理让Redis操作一目了然

Redis命令行操作繁琐低效?RESP.app可视化智能管理让Redis操作一目了然 【免费下载链接】RedisDesktopManager RedisInsight/RedisDesktopManager: RedisDesktopManager 是一个用于 Redis 数据库管理的桌面应用程序,可以用于连接和操作 Redis 数据库&…

2026/8/7 13:39:25 阅读更多 →

日新闻

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南

为什么scrcpy成为Android投屏的终极解决方案:完整实战指南 【免费下载链接】scrcpy Display and control your Android device 项目地址: https://gitcode.com/GitHub_Trending/sc/scrcpy 想要将Android手机屏幕完美投射到电脑上,享受大屏操作的自…

2026/8/7 0:00:19 阅读更多 →
如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南

如何在5分钟内掌握Tom Select:打造现代化表单选择器的终极指南 【免费下载链接】tom-select Tom Select is a lightweight (~16kb gzipped) hybrid of a textbox and select box. Forked from selectize.js to provide a framework agnostic autocomplete widget wi…

2026/8/7 0:00:19 阅读更多 →
5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件

5分钟快速上手:NSZ压缩工具终极指南,轻松管理Switch游戏文件 【免费下载链接】nsz NSZ - Homebrew compatible NSP/XCI compressor/decompressor 项目地址: https://gitcode.com/gh_mirrors/ns/nsz 你是否在为Nintendo Switch游戏文件占用大量存储…

2026/8/7 0:00:19 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/6 22:02:27 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/6 22:02:27 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/6 22:02:27 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/6 22:02:28 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →