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

Python位运算技巧

"""
位运算技巧 — 直接操作整数二进制位
速度快,适合状态压缩、权限标记、性能关键代码
"""


def get_bit(n: int, p: int) -> int: return (n >> p) & 1
def set_bit(n: int, p: int) -> int: return n | (1 << p)
def clear_bit(n: int, p: int) -> int: return n & ~(1 << p)
def toggle_bit(n: int, p: int) -> int: return n ^ (1 << p)


def count_set_bits(n: int) -> int:
"""Brian Kernighan 算法:每次消除最低位的 1"""
c = 0
while n: n &= n - 1; c += 1
return c


def is_power_of_two(n: int) -> bool:
"""2 的幂:二进制只有一个 1"""
return n > 0 and (n & (n - 1)) == 0


def find_single_number(nums: list) -> int:
"""出现一次的数,其他成对出现(a ^ a = 0, a ^ 0 = a)"""
r = 0
for n in nums: r ^= n
return r


def swap(a: int, b: int) -> tuple:
"""不用临时变量交换两个整数"""
a ^= b; b ^= a; a ^= b; return a, b


def find_missing(arr: list, n: int) -> int:
"""0..n 中缺失的那个数,利用 XOR 性质"""
x = 0
for i in range(n + 1): x ^= i
for v in arr: x ^= v
return x


def subset_bitmask(nums: list) -> list:
"""用二进制位掩码枚举所有子集"""
res = []
for mask in range(1 << len(nums)):
res.append([nums[i] for i in range(len(nums)) if mask & (1 << i)])
return res


def demo():
n = 0b101101
print(f"原始: {bin(n)}")
print(f"get(2)={get_bit(n,2)}, set(4)={bin(set_bit(n,4))}")
print(f"clear(5)={bin(clear_bit(n,5))}, toggle(0)={bin(toggle_bit(n,0))}")
print(f"count 1s: {count_set_bits(n)}, 2的幂 16:{is_power_of_two(16)} 18:{is_power_of_two(18)}")
print(f"单身数: {find_single_number([4,1,2,1,2])}")
print(f"swap(3,5): {swap(3,5)}, 缺失: {find_missing([0,1,3,4], 4)}")
print(f"位掩码子集 [1,2]: {subset_bitmask([1,2])}")


if __name__ == "__main__":
demo()

http://www.jsqmd.com/news/909359/

相关文章:

  • yuzu模拟器完全指南:免费在PC上畅玩Switch游戏的终极方案
  • 2026年公众号编辑器核心技术指标对比:AI、模板、工作流整合 - 行业产品测评专家
  • 自学程序员求职指南:从技能准备到面试通关的实战策略
  • Windows离线语音识别终极方案:TMSpeech如何彻底改变你的工作效率?
  • 科研精密超低温工况怎么选?深圳保利德低温螺杆式冷冻机高精度更稳定 - 资讯纵览
  • Google Home智能音箱深度配置指南:从核心原理到高阶自动化实战
  • EdgeRemover:专业卸载微软Edge浏览器的完整PowerShell解决方案
  • 2026年防泄密系统服务商实力盘点:华东地区值得信赖的品牌 - 速递信息
  • ChatGPT能力升级:从聊天机器人到智能体,解锁企业级AI应用新范式
  • AI时代职场变革:从技能重塑到人机协作的未来工作模式
  • imFile:重新定义下载管理的开源解决方案
  • 如何高效获取同花顺问财数据:Python金融量化分析终极指南
  • 【C++进阶】面试官常考的关于多态一些常见问题!!!
  • 从自动化到自主化:构建会思考的安全代理架构与实战指南
  • 基于CircuitPython与3D打印的游戏计时器:从硬件选型到代码实现
  • 数字创作者工作流:技术、AI与自动化如何协同提升内容产出效率
  • Qwen3-VL-4B-Instruct在STEM领域的应用:数学推理与科学问题解决指南
  • 微算法科技(NASDAQ :MLGO)推出量子零知识证明共识机制,筑牢区块链安全防线
  • Anime4KCPP:让动漫图像重获新生的高性能超分辨率引擎 [特殊字符]
  • 2026年上海美业培训深度横评:化妆美甲美发零基础到高薪就业全链路指南 - 年度推荐企业名录
  • 你的知识存在哪里?PandaWiki + cpolar把本地知识库体验拉满
  • COM3D2.MaidFiddler:终极游戏实时编辑器,5分钟快速定制你的女仆角色!
  • 如何解决GoB插件在Blender 4.3中的导入问题:5个终极技巧
  • 新手也能看懂的CTF题复盘:从流量包里挖出Webshell和Frpc代理的完整攻击链
  • 原神帧率解锁终极指南:3步安全突破60FPS限制,释放硬件全部性能
  • FancyZones技术架构深度解析:从窗口管理到生产力革命
  • RAG从入门到精通:检索增强生成的完整技术栈
  • FGA自动化神器:重新定义FGO安卓玩家的战斗体验
  • BERT uncased L-12 H-256 A-4模型架构详解:12层256隐藏层的设计奥秘
  • 让聊天记录成为数字资产:WeChatMsg打造你的专属记忆银行