位运算
运算技巧
lowbit运算:
x&(-x)
- 作用:返回从左往右数最后一位1,(最右边一位)如10100,变为100,1010110变为10(返回的是十进制数)
举例:求n的第k位数字: n >> k & 1
int lowbit(int x){return x&(-x);}
n&(n−1)
(n−1)
解析: 二进制数字 n 最右边的 1 变成 0 ,此 1 右边的 0 都变成 1 。
n&(n−1)
解析: 二进制数字 n 最右边的 1 变成 0 ,其余不变。
题目
- 力扣:二进制中1的个数:https://leetcode.cn/problems/number-of-1-bits/
- 若
n & 1
= 0 ,则 n二进制 最右一位 为 0 ; - 若
n & 1
= 1,则 n二进制 最右一位 为 1 。 n >>= 1
: 将二进制数字 n无符号右移一位
注:
源码:x 的二进制 反码:x 的二进制取反 补码:反码 + 1