位运算使我们算法中经常操作的算法,下面进行几个简单的位运算操作:
输出x二进制表示的形式中第k位是什么:(x >> k & 1)
实例:输出一个整数的二进制表示中1的个数:
#include <iostream>
using namespace std;
int lowbit(int x)
{
return x & -x;
}
int main()
{
int n,res = 0;
cin >> n;
while(x) x -= lowbit(x),res ++;
cout << res << endl;
}
我们首先写一个lowbit函数,这个函数的意义是找到我们输入数字x二进制表示形式中最后一个1的位置:
现在我们讲一下lowbit的操作原理:首先我们必须知道一个整数的相反数是其二进制数字各位取反加1,而Lowbit函数就是将x和-x按位与操作,如下图解:
main函数中,x每减掉一个1就做一次加加,最终就能找到x中所有的1!
在此我想再解释一下关于原码,反码,补码:
原码 就是 x的二进制表示;反码是x的二进制各位取反;补码是反码加1;
#include <iostream>
using namespace std;
int main()
{
int x = 10;
unsigned int y = -10;
for(int i = 31;i>=0;i--) cout << (x>>i&1);
for(int i = 31;i>=0;i--) cout << (y>>i&1);
}
测试结果: