第一讲 基础算法 - 07 位运算
AkariAcWing 801. 二进制中1的个数 - 糖豆爸爸 - 博客园
AcWing 算法基础课笔记 1.基础算法-CSDN
AcWing《算法基础课》第1章 算法基础 - AcWing
位运算
1 核心思想
讲两种最常用的操作.
1.1 n >> k & 1
n >> k & 1
返回 x 右起第 k 位二进制数
n 的二进制表示中第 k 位是几 (从右往左, 低位到高位) ?
- 先把第 k 位移到最后一位
n >> k
- 看个位是几
n & 1
- 结合一、二步,可得
n >> k & 1
应用: 可以求一个数的二进制数, 比如 10(10) 的二进制数是 1010(2)
|
1.2 lowbit(x)
lowbit(x)
从低位开始返回直至 x 的最后一位 1
比如:
x lowbit(x)
1010 10
1010000 10000
lowbit
的实现原理 lowbit(x) = x & -x
因为 -n 是 n 的负数,即为 n 的补码加 1 :-x = ~x + 1
故 x & -x = x & (~x + 1)
应用 : 可以求二进制中 1 的个数
2 模板
返回 n 右起第 k 位二进制数: n >> k & 1 |
说明:
- 若让 x 不停地减去最后一位 1,直到变成 0 ,做减法的次数就是 x 二进制表示的 1 的个数
- 可用
for(int k = 31; k >= 0; k--)
把 int 转成二进制数
3 扩展知识 *
详细讲解看这位大佬: AcWing 801. 二进制中1的个数 - 糖豆爸爸 - 博客园
位运算两个性质:
x & (−x)
:保留二进制下最后出现的 1 的位置,其余位置置 0x & (x−1)
:消除二进制下最后出现的 1 的位置,其余保持不变
评论
匿名评论隐私政策
TwikooWaline
✅ 你无需删除空行,直接评论以获取最佳展示效果