位运算
说明
参考灵神的题单刷题
总结一些技巧
判断一个数二进制形式下第i位是否为1
可以将该数看作一个集合,该集合存储的是二进制表示下为1的下标。
//n >> i 后的最低位表示n的第i位
if(n>>i & 1)
{
if(i%2) 奇数++
else 偶数++
}
2的幂或者4的幂
- 2的幂
整个二进制形式的数只有一个1,那么我们考虑n-1显然转换为2进制后,那个1会变为0
bool check2 = n>0 && (n & (n-1)) == 0
- 4的幂
同样二进制形式只有一个1,可以利用余数来判断2%3 = 2 4%3 = 1
判断该位是否为1
判断第i位是否为1,1<<i 相当于
n & (1<<i)
求解一个数中1的个数
//将一个数的最低位1变为0 n&(n-1)
while(n)
{
n = n&(n-1);
res++;
}
return res;
奇数和偶数中1的数量关系
考虑两个相邻的奇数偶数
//i为奇数
nums[i] = nums[i-1]+1;
//i为偶数
nums[i] = nums[i>>2];
判断两个数二进制形式不同的位数
不同->异或 -> 求异或的1的个数
按位与& 不会增大数
即 c = a&b 那么c <= max(a,b);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律