1<<i
是将1左移了 i 位,即第 i 位为1,其余位为0;
例如1<<2 则0001->0100
n&(1<<i)
是将左移i位的1与n进行按位与,即为保留n的第i位,其余位置零
意思大概就是:
如果n第 i 位为0,则n&(1<<i)
的值为0
否则n&(1<<i)
不为0
常用if(n&(1<<i)==0)
来判断n的第i位是否为0
————————————————
版权声明:本文为CSDN博主「feiyu_diary」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/feiyu_diary/article/details/78802996
另附:整理一下刷题中遇到的位运算skills
- c++内置函数:统计一个数的二进制形式里有多少个1:__builtin_popcount(n)
- 判断n是否为2的幂次方:
if ((n & (n - 1) ) == 0)
说明n是2的幂次方;if ((n & (-n)) == n)
也可以说明n是2的幂次方