位运算总结

来源:互联网 发布:设计模式php 编辑:程序博客网 时间:2024/05/01 09:34

1. &(与)运算

0 & 0 = 0          1 & 0 = 0          0 & 1 = 0          1 & 1 = 1


2的二进制为10,4的二进制位100,2与4进行&运算为

         010

         110

结果: 010


2. |(或)运算

0 & 0 = 0          1 & 0 = 1          0 & 1 = 1          1 & 1 = 1


2的二进制为10,4的二进制位100,2与4进行|运算为

         010

         110

结果: 110



3. ^(异或)运算

0 & 0 = 0          1 & 0 = 1          0 & 1 = 1          1 & 1 = 0


2的二进制为10,4的二进制位100,2与4进行^运算为

         010

         110

结果: 100


4. ~(取反)运算

~0 = 1          ~1 = 0


2的二进制位10,取反操作结果为01


5. <<(左移)运算


m<<n,表示m的二进制向左移n位,左移之后右边补0


6. >>(右移)运算

右移运算符m>>n表示把m右移n位。右移n位的时候,最右边的n位将被丢弃。


参考:http://www.cnblogs.com/heyonggang/p/3311128.html



位运算的使用

1.&运算的使用


(1)求一个数是否是2的阶次方数

思路:如果一个数是2的阶次方数,那么它的二进制首位一般是1,后面是若干个0,如8的二进制位1000,如果将这个数减一之后,再与该数做与运算,那么应该全为0,1000减一之后为0111,1000&0111=0000,所以可以使用((number-1)&number)是否为0判断。

#include<iostream>using namespace std;bool IsPowerOfTwo(int number){if(number<=0)return false;if(((number-1)&(number))==0)return true;elsereturn false;}int main(){int number=0;scanf("%d",&number);cout<<IsPowerOfTwo(number)<<endl;return 0;}

(2)判断一个数的二进制中1的个数

http://bbs.csdn.net/forums/Mobile





0 0