说明
参考灵神的题单刷题
总结一些技巧
判断一个数二进制形式下第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 相当于\(2^i\)整个二进制形式下只有第i位为1
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的个数
标签:判断,运算,奇数,二进制,nums,偶数,++ From: https://www.cnblogs.com/XTG111/p/18059765