You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于《Hacker's Delight》中x & (x-1)位操作的Python实现疑问

关于《Hacker's Delight》中x & (x-1)的问题解答

代码错误修正

你写的Python代码犯了关键错误:把按位与运算符&写成了逻辑与运算符and,这两个操作完全不同。

正确代码应为:

bin(0b1011000 & (0b1011000 - 1))

运行后会得到'0b1010000',和书中示例的转换(01011000 → 01010000)完全一致,这才是正确结果。你之前用and得到的'0b1010111'是逻辑运算的结果,和按位运算无关,属于错误输出。

去掉前缀「b」后的错误原因

你提到去掉前缀「b」后得到奇怪结果,本质是Python的语法规则:以0开头的数字会被解析为八进制数,而非二进制。比如01011000是八进制数,转十进制为270336,计算270336 & (270336-1)自然会得到完全偏离预期的二进制结果'0b11110110110100110111'。如果要写二进制数,必须加0b前缀,或直接用十进制数计算后转二进制。

x & (x-1)的实用场景

这个位操作是经典的位运算技巧,常见用途包括:

  • 判断是否为2的幂:当x != 0时,若x & (x-1) == 0,则x是2的幂(因为2的幂二进制只有一个1位,去掉后直接变为0)。
  • 统计二进制中1的个数:循环执行x = x & (x-1)直到x变为0,循环次数就是二进制里1的位数。
  • 快速重置状态位:在处理位掩码、硬件寄存器等场景时,快速清零最右侧的1位,用于状态切换或标记清除。

内容的提问来源于stack exchange,提问作者Ryan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 05:20:28