位运算(一些简单算法)

位运算

思想:第一个题的思想:求出第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版权协议,转载请附上原文出处链接和本声明。