C语言中的位运算有六个:按位与(&),按位或(|),按位异或(^),取反(~),左移(<<),右移(>>)。除~以外其余均为二元运算符,即要求运算符两侧均有一个运算量;位运算量只能为整型或字符型,不能为实型数据。
1.按位与&
0&0=0 0&1=0 1&0=0 1&1=1;
3&5=(00000011)&(00000101)=00000001=1
&的特殊用途有以下:
(1)清零。如原有数00101011,则另找一数(不一定唯一)10010100与原来的数进行&运算即得结果0。
(2)取一个数中某些指定的位。
(3)保留某些位数。
2.按位或|
0|0=0 0|1=1 1|0=1 1|1=1
例如求067|017
将八进制数60与八进制数17进行按位或运算得00110000|00001111=00111111.
3.按位异或^
0^0=0 0^1=1 1^0=1 1^1=0
按位异或有以下用途:
(1)使特定位翻转,只需取好值即可。
(2)与0相^保留原值。
(3)交换两个值而不必采用临时变量。交换a和b:a=a^b;b=b^a;a=a^b。
4.取反~
使各位0变为1,变为0
5.左移<<
左移比乘法运算快得多,有些系统自动将乘以2用左移一位来实现。
6.右移>>
a>>2表示将a的各位右移2位。