每一位取法

Lowbit(x)

概念

实现了取到x的最后一位1,后面全是0

即给定 lowbit(x) 返回 10…0,其中第一位1是x的最后一位1

实现

这涉及到计算机运算,实际上就是让 x 与(&) -x

-x是x的相反数,实际上做的是x取反加1,这样一来,原本最后0都变成1,第一个1变成0,加1之后进位,第一个1再次变成1,第一个1的高位保持取反的值不变,与原来的x相与之后,则只留下第一个1和后面的0

用途

  • 可用于统计一个数中1的个数, while(x) x -= lowbit(x), cont ++