前言
我们在做题的时候经常会遇到十进制转化为二进制的题目,这个时候我们就可以运用到位运算
一、位运算是什么?
程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。
二、运算方法
1.求n的第K位数字
求n的第K位数字:求n的二进制数中第K位是几
关于位运算的了解呢我们第一步可以先学习如何将十进制的二进制直接输出出来:
①先把第K位移到最后一位 n >> k;
②看个位是几 X & 1;
结合①② 可得 n >> k & 1
代码如下(求15的二进制数):
#include<iostream>
using namespace std;
int main()
{
int n = 15;
for(int k = 3; k >= 0; k--) cout << (n >> k & 1);
return 0;
}
2.返回n的最后一位1
返回n的最后一位1需要用到lowbit(x)
;
lowbit(x)函数用来取一个二进制最低位的一与后边的0组成的数
例:x = 5(101),lowbit(5)=1(1)
x = 12(1100),lowbit(12)=4(100)
int lowbit(x)
{
return x & -x;
}
解析:x & -x = x & ( ~ x +1)
因位负x 就是 x的反码 加一
这里插入图片描述
3.二进制中1的个数
这里给大家一个题目参考一下
#include<iostream>
using namespace std;
int lowbit(int x) // 返回末尾的1
{
return x & -x;
}
int main()
{
int n;
cin >> n;
while (n -- )
{
int x ;
cin >> x;
int res = 0;
while(x)
{
x -= lowbit(x);//每次减去X的最后一位一
res ++;
}
cout << res <<" ";
}
return 0;
}
总结
以上就是今天要讲的内容,本文仅仅简单介绍了位运算的使用,而位运算就是直接对整数在内存中的二进制位进行操作的便捷方法。