位运算
思想:第一个题的思想:求出第K位的二进制下标是几,例如(1111)从右往左的下标是0,1,2,3。当我们要求第三位的下标是几时,我们先将数左移K位到个位,然后再&1,这样就可以准确的求出个位是0还是1,个位所求即为答案。第二个题思想:了解x&-x代表什么,-x其实就代表x取反码加1为补码,通过运算得出,x&-x每次求出的是从右往左第一个为1的二进制数。例如0010010001,第一次得到最后一个0000000001,第二次0000010000,第三次0010000000。我们这次求的就是一个数中,二进制中1的个数。
注意
下去一定要好好理解原码,反码,补码的相关概念。
题目。
1.求第K位二进制数是1还是0
2
代码。
#include<iostream>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
cout<<(n>>k&1)<<endl;//二进制个位是从0开始的
return 0;
}
#include<iostream>
using namespace std;
int lowbit(int x)
{
return x&-x;
}
int main()
{
int g;
cin>>g;
while(g--)
{
int x;
cin>>x;
int res=0;
while(x)x-=lowbit(x),res++;//每次减去X的最后一位1
cout<<res<<endl;
}
return 0;
}
结果。


总结。
一定要反复反复的去复习知识,每日都会有新的体会,但也不要忘记新的知识也在走哦。
版权声明:本文为qq_56644322原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。