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

找到一个数的最低二进制位(lowbit)

Lowbit 技巧详解:高效分离整数的二进制幂

一、 核心功能

lowbit 技巧是一种高效的位运算操作,其核心功能是快速获取一个整数在二进制表示中,位置最低的那个“1”所代表的数值

例如,对于整数 12

  • 其二进制表示为 1100
  • 它最低位的“1”在第三位(从右数,值为 2^2)。
  • 因此,lowbit(12) 的结果就是 4

这个技巧常用于需要逐个处理二进制位“1”的场景,如树状数组(Fenwick Tree)和一些特定的算法问题中。

二、 原理:n & -n

lowbit 操作的实现非常简洁,仅需一行代码:

int lowbit = n & -n;

负数的二进制补码表示

一个正整数 n 的负数 -n 在计算机中的表示过程如下:

  1. 按位取反:将 n 的二进制表示中所有的 0 变为 11 变为 0。这个操作用 ~n 表示。
  2. 加一:将取反后的结果加 1

所以,-n 在数学上等同于 ~n + 1

n = 12 为例

让我们通过一个具体的例子,看看 12 & -12 是如何得到 4 的。

  1. n = 12 的二进制表示
    我们以8位二进制为例:

    n = 00001100
    
  2. 计算 -n (即 -12)

    • 步骤一:按位取反 ~n
        00001100  (12)
      ~ --------11110011  (~12)
      
    • 步骤二:加一 ~n + 1
        11110011
      + 00000001
      ----------11110100  (-12 的二进制补码表示)
      
  3. 执行核心操作 n & -n
    现在,我们将 n-n 的二进制表示进行按位与(&)操作。只有在两个数中对应位都为1时,结果的该位才为1

        00001100  (n = 12)& 11110100  (-n = -12)----------00000100  (结果)
    
  4. 结果解读

    • 二进制 00000100 转换回十进制就是 4
    • 回顾 n = 12 的二进制 00001100,它最低位的那个 1 确实代表 2^2 = 4
    • 因此,12 & -12 成功地分离出了这个值。

三、 循环应用:分解整数为2的幂之和

利用 lowbit 技巧,我们可以轻松地将一个整数分解成多个2的幂的和。

http://www.aitangshan.cn/news/85.html

相关文章:

  • 数字转人民币大写的函数
  • DP 优化专题
  • Git 常用命令总结
  • 解决 计算机有两个python环境导致 Pygal 模块导入错误
  • 详解:GPT-5 API如何在国内无限制使用?OpenAI最新发布的这款模型到底有何过人之处?
  • Linux Makefile
  • 【高等数学】第八章 向量代数与空间解析几何——第三节 平面及其方程 - 指南
  • 字符串的最大公因子
  • YACS2025年6月乙组
  • chrony时间同步服务详解
  • SAP工厂erp管理系统软件-适合生产型企业的erp系统推荐
  • 我去,Gitee官方推荐的开源项目,这程序我是不能干了,这功能真是逆天了
  • ArcGISProject工程文档的使用学习笔记
  • 8.4 ~ 8.10
  • MeshCN 太阳能 Mesh 网络:SX1262 芯片赋能,无网无电也能畅联
  • 中电金信 :从通用狂飙到穿透场景,行业智能化落地没有捷径
  • wls ssh 连接异常 Missing privilege separation directory: /run/sshd
  • Prometheus源码专题【左扬精讲】—— 监控系统 Prometheus 3.4.0 源码解析:scrape manager 与 scrapeLoop
  • 洛谷P13030 [GCJ 2021 #1B] Subtransmutation
  • idempiere安装
  • 如何安装 Git (windows/mac/linux)
  • 拆解Agent如何实现“听懂→规划→搞定”全流程
  • ActiveMQ 设置用户名密码
  • MySQL 8.0.42 手动部署全过程(CentOS 7 虚拟机 Linux)
  • PDF处理控件Aspose.PDF教程:在C#、Java、Python中快速缩小PDF
  • 自动化测试框架选型指南:5大主流工具实战对比
  • Re:从零开始的动态凸壳
  • 资产管理系统 - microsoft
  • G1 垃圾回收器调优
  • 面相对象编程:类和对象