位运算符列表:
& 按位与 如果两个相应的二进制位都为1,则该位的结果值为1,否则为0
| 按位或 两个相应的二进制位中只要有一个为1,该位的结果值为1
^ 按位异或 若参加运算的两个二进制位值相同则为0,否则为1
~ 取反 ~是一元运算符,用来对一个二进制数按位取反,即将0变1,将1变0
<< 左移 用来将一个数的各二进制位全部左移N位,右补0
>> 右移 将一个数的各二进制位右移N位,移到右端的低位被舍弃,对于无符号数,高位补0
注:下面内容提到的第几位都是从右边开始数。
1、“按位与” 运算符(&)的用途:
(1)清零
若原来的数中为1的位,新数中相应位为0,然后使二者进行&运算,即达到清零效果。
(2)取一个数中某些指定位
若有一个整数a(2byte)为00101100 10101100,想取其中的低字节,即
a&11111111==10101100
(3)保留指定位:
与一个数“按位与”运算,此数在改位取1,其余位取0
例如:二进制整数a为01010100,要把第6,5,4,2,1位保留下来就应该
a&00111011==00010000
(4)判断一个数是奇数还是偶数:
因为一个数 and 1的结果就是取二进制的最末位,
所以二进制的最末位为0表示该数为偶数,最末位为1表示该数为奇数。
2、“按位或”运算符(|)的用途:
按位或运算常用来对一个数据的某些位定值为1,如:
二进制整数a为1010100,c为char字符型,若想使第6位改为1,则
(1)a|1110000即1110100
(2)c |= (1<<6);
注:若想使第i 位改为0,则
void SetBit(char c,int i){
c &= ~(1<<i); }
3、交换两个值,不用临时变量
见代码:
#include <stdio.h> int main() { int a=3,b=4; a=a^b; printf("%d ",a); b=b^a; printf("%d ",b); a=a^b; printf("%d ",a); return 0; }
Output
7
3
4
4“取反”运算符(~)
即用来求整数的二进制反码
5、“异或”运算符(^)
可以用来使第i位翻转,即0变成1,1变成0
void FlipBit(char *c, int i){ c^=(1<<i); }
6、位运算与赋值运算符组成复合赋值运算符入,如:
&=,|=,>>=,<<=,^=
例子:
a &= b相当于 a = a&b
a <<=2 相当于 a = a<<2
以上内容改编自: