Loading

位运算

说明

参考灵神的题单刷题
总结一些技巧

判断一个数二进制形式下第i位是否为1

可以将该数看作一个集合,该集合存储的是二进制表示下为1的下标。

//n >> i 后的最低位表示n的第i位
if(n>>i & 1)
{
	if(i%2) 奇数++
	else 偶数++
}

2的幂或者4的幂

  1. 2的幂
    整个二进制形式的数只有一个1,那么我们考虑n-1显然转换为2进制后,那个1会变为0
bool check2 = n>0 && (n & (n-1)) == 0
  1. 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的个数

按位与& 不会增大数

即 c = a&b 那么c <= max(a,b);

posted @ 2024-03-07 22:56  XTG111  阅读(18)  评论(0)    收藏  举报