位运算

说明

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

判断一个数二进制形式下第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 相当于2i整个二进制形式下只有第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);

作者:XTG111

出处:https://www.cnblogs.com/XTG111/p/18059765

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   XTG111  阅读(2)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
more_horiz
keyboard_arrow_up light_mode palette
选择主题
点击右上角即可分享
微信分享提示