c语言中,程序可以对数值进行二进制位的运算,从而提高运行的效率,c语言中共有6种位运算符,分别是:’&’(按位与),’|’(按位或),’^’(异或),’~’(取反),’<<’(左移),’>>’(右移)。下面分别介绍它们的特点和用法
1. “按位与”运算符(&)
按位与运算符的运算规则是参与运算的两个二进制位都为1则为1,否则为0。
真值表:
& | 1 | 0 |
---|---|---|
1 | 1 | 0 |
0 | 0 | 0 |
例:
4: 00000100
-6: 11111010
按位与(0):00000000
按位与的应用:
- 取特定位置值
取01101101的后4位,可以通过与00001111进行按位与运算
01101101
(&) 00001111
结果 00001101
- 特定位置清零
使01101101的中间3位置0,通过与11100011进行按位与运算
01101101
(&) 11100011
结果 01100001
2.“按位或”运算符(|)
按位或运算符的运算规则是参与运算的两个二进制位有一个为1则为1,否则为0。
真值表:
| | 1 | 0 |
---|---|---|
1 | 1 | 1 |
0 | 1 | 0 |
例:
2: 00000010
4: 00000100
按位或运算(6): 00000110
按位或运算的应用:
- 将特定位置1
将01101101的后四位置1,可以与00001111进行按位或运算
01101101
(|) 00001111
结果 01101111
3.“异或”运算符(^)
异或运算符也称为XOR运算符,它的运算规则是参与运算的两个二进制位相同为0,不同为1。
真值表:
^ | 1 | 0 |
---|---|---|
1 | 0 | 1 |
0 | 1 | 0 |
例:
-3: 11111101
5: 00000101
异或运算(-8):11111000
异或运算的应用:
- 与1异或使特定位反转
10110010与0001111异或使后四位反转:
10110110
(^) 00001111
结果 10111001
- 与0异或保持原值
- 交换两个数值
如a=3,b=4,通过以下运算可以交换两个变量的值,使a=4,b=3
a=a^b;
b=b^a;
a=a^b;
4.“取反”运算符(~)
取反运算符将数值按位取反。0变为1,1变为0。取反运算符为单目运算符,且优先级高于算术运算符、关系运算符、逻辑运算符以及其他的位运算符。
例:
-5: 11111011
~取反(4): 00000100
5.“左移”运算符(<<)
左移运算符将数值的二进制位左移,最左端溢出的数值舍弃。右端低位补0,一个数被左移n位,相当于乘2n。由于计算机系统中左移操作比乘2运算快的多,所以在编程中最好将乘2n运算用左移运算符代替。
例:
3: 00000011
左移一位(6):00000110
6.“右移”运算符(>>)
右移运算符将数值的二进制位右移,最右端的低位被舍弃。
对于正数来说,右移最高位补0,右移n位相当于将该数除2n。
而对于负数,则分为算术右移与逻辑右移。算术右移最高位补符号位1,而逻辑右移补0。
例:
8: 00001000
右移1位(4):00000100
-6: 11111010
算术右移1位(-3): 11111101
逻辑右移1位(125): 01111101
参考资料:
谭浩强,C 程序设计 (第三版)