一、基本概念
用于对整数类型(int,char, long 等)变量中的某一位(bit), 或者若干位进行操作。
比如: 判断某一位是否为1 只改变其中某一位,而保持其他位都不变。
C/C++语言提供了六种位运算符来进行位运算操作
二、六种基本操作
& 按位与
| 按位或
^ 按位异或
~ 按位取反
<< 左移
>> 右移
三、lowbit(n)运算
lowbit(n)的意思是将n转化成二进制数之后,只保留最低位的1及其后面的0,得到的十进制数。
作用:返回n的最右边的那一位1和它右边的0然后它对应的十进制数
四、n的二进制表示中第k位是几
五、例题应用
·二进制中1的个数(lowbit料理)
#include <iostream> using namespace std; int lowbit (int n) { return n&(-n); } int main() { int n; cin>>n; int res=0; while(n) { n-=lowbit(n); res++; } printf("%d\n",res); return 0; }
·二进制中1的最低位位置
·方法:打表法+lowbit
·一些知识点介绍:
<< 左移--------
1 << K 得到 2^K 也就是第K位为1的二进制数 因此: Log2( 1<<K) = K
用打表法计算 Log[1<<16]--------
·本题代码:
log[]数组存储的就是log[i]是几(底数是2)
该数组的赋值方式:自己写的bulidlogtable函数