位运算
来源:互联网 发布:淘宝页眉背景图素材 编辑:程序博客网 时间:2024/06/03 16:08
位运算:
1.按位与:a&b
2.按位或:a|b
3.按位异或:a^b
4.按位取反:~a
5.左移:a<<b
6.带符号右移:a>>b
7.无符号右移:a>>>b(Java)C没有这个符号
1.and运算符&
通常用于二进制取位操作,例如:一个数and 1的结果就是取二进制的最末位。这可以用来判断一个整数的奇偶,二进制最末位为0的为偶数,为1的为奇数。
boolisEvenNum(num)
{
return !(num & 1)
}
101101----45
010110----22
----------
000100----4
2.or运算符|
1101101---109
1011001--89
-------
1111101--125
or运算通常用于二进制特定位上的无条件赋值,例如:一个数or1的结果就是把二进制最末位强行变成1,如果需要把二进制最末位变成0,对这个数or1之后再减1就可以了,其实际意义就是把这个数强行转变成最接近的偶数。
1101101
0000001
3.异或运算^
1011011----91
0100101--37
-------
1111110---126
相同为1,不同为0
异或运算交换两个数的值
a = a ^b
b = a^b
a = a^b
4.取反运算
b = ~a
5.左移运算
在二进制后面添加n个0
左移n位
a*(2^n)
6.右移运算
去掉后面n位
右移n位
a/(2^n)
示例代码:
//@biref 是否是偶数bool isEvenNum(int num){return !(num & 1);}//@biref 转换为最近的偶数,被转换的数可以是偶数,只不过,结果是他自己而已int toEventNum(int num){int result = 0;//需要用括号将“|”运算括起来,不然,结果不对return (num | 1) - 1;}void selfSwap(int &a,int &b){a = a^b;b = a^b;a = a^b;}int main(){//位运算//1.and运算&//计算101101&010110 = 000100int a = 45 & 22;cout << "a=" << a << endl;//2.or运算|for (int i = 0; i < 100;i++){cout << "Num:" << i << ",EvenNum:" << toEventNum(i) << endl;}//3.xor运算^,异或运算int b = 2;int c = 5;cout << "a=" << a << ",b=" << b << endl;selfSwap(a, b);cout << "a=" << a << ",b=" << b << endl;//4.not运算,取反int d = 100;d = ~d;int g = 300;g = ~g;unsigned int e = 100;e = ~e;unsigned int f = 300;f = ~f;cout << "d=" << d << "e=" << e<<",f="<<f<<",g="<<g<<endl;//5.<<运算,左移运算,左移一位,相当于乘以2,//通常认为,左移一位的效率要比乘以2要高,因为,位运算更接近底层。//因此,在程序中用到乘以2^n的操作尽量用左移为运算来操作int h = 5;h = h << 2;//h * 2^n:n是左移的位数,//101101//左移两位//10110100---加两个0cout << "h=" << h << endl;//6.>>运算,右移运算,想办法用右移运算代替出发运算,会使代码效率大大提高int i = 200;i = i >> 2;//i / (2^n)//11001000//右移2位//110010cout << "i=" << i << endl;system("pause");return 0;}
0 0
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- 位运算
- Java 算法编程 N阶乘最后总位数问题
- 机器学习实践中应避免的七种常见错误
- 【GDOI 2013模拟】屏保
- mysql 唯一索引
- leetcode_Count and Say
- 位运算
- HDU5363_____Key Set
- dfs Fire Net
- Use Notes of Modelsim (1)
- hdu1050&&nyoj220 Moving Tables(贪心)
- xcode6插件地址(某些插件不能用解决办法)
- 配置maven版本出错
- Linux uniq 命令
- oracle9i statspack 报告 分析 direct path read 等待事件