简单二进制操作--lowbit
lowbit
运算是一种常用的二进制运算操作,它的作用是返回某个数的二进制表示中最末一个1及其后边的0构成的十进制数大小。
如: 假设x = 1000100010 -- lowbit(x)
= 10(2进制)=2(10进制)
那么具体lowbit
上述简单的阐述可以佐证lowbit
的正确性。既然它的正确性有了保证,那么它到底有什么用呢?
下面我们举一个最最简单的lowbit
运算的应用场景:求一个十进制数的二进制表示中有几个1。如 10(10进制)的二进制表示就有2个1。
分析:要怎么可以得到我们想要的答案2呢?我们可以使用lowbit
运算来得到某个数的最末位的1及其后边的0构成的数,然后使用原数减去这个lowbit
求得的数,那么原数就会减少一个1,我们可以统计一共减少1的次数,直到原数变为0.
题目描述:给定一个长度为 n 的数列,请你求出数列中每个数的二进制表示中 1 的个数。
输入格式
第一行包含整数 n。
第二行包含 n 个整数,表示整个数列。
输出格式
共一行,包含 n 个整数,其中的第 i 个数表示数列中的第 i 个数的二进制表示中 1 的个数。
数据范围
1≤n≤100000 0≤数列中元素的值≤10^9
输入样例:
5
1 2 3 4 5输出样例:
1 1 2 1 2
下面是code展示:
这就是lowbit
运算最简单的应用了,除外,lowbit
运算在线段树、树状数组中也有重要应用场景.