位运算操作符
所有的位运算操作符都是按“二进制位补码”进行运算。
补码(有符号位):
- 正数的原码、反码、补码都相同
- 负数的补码=原码取反加1
1、按位与(&)
运算规则:0 & 0 = 0 ;0 & 1 = 0;1 & 0 = 0;1 & 1 = 1
口诀:有“0”为“0”,全“1”为“1”
举例:
3 & 5 =1
00000000 00000000 00000000 00000011
& 00000000 00000000 00000000 00000101
——————————————————————
00000000 00000000 00000000 00000001
应用:
(1)清零特定位:如果想将一个单元清零,即使其全部二进制位为0,只要与一个各位都为零的数值相与,结果为零。 即:m & 0 = 0
(2)取一个数中指定位:找一个数,对应X要取的位,该数的对应位为1,其余位为零,此数与X进行“与运算”可以得到X中 的指定位。 即:m = 0100 1110,想取m的后四位,只需要 m & 0000 1111 = 0000 1110
2、按位或( | )
运算规则:0 | 0 = 0 ; 0 | 1 = 1 ; 1 | 0 = 1 ; 1 | 1 = 1
口诀:有“1”为“1”,全“0”为“0”
举例:
3 | 5 = 7
00000000 00000000 00000000 00000011
| 00000000 00000000 00000000 00000101
——————————————————————
00000000 00000000 00000000 00000111
应用:
(1)常用来对一个数据的某些位置1:找到一个数,对应X要置1的位,该数的对应位为1,其余位为零。此数与X相或可使X中的某些位置1。
即:将m = 1010 0000的低4位置1 ,用 m | 0000 1111 = 1010 1111
3、按位异或( ^ )
运算规则:0 ^ 0 = 0 ; 0 ^ 1 = 1 ; 1 ^ 0 = 1 ; 1 ^ 1 = 0
口诀:相同为“0”,不同为“1”
举例:
3 ^ 5 =
00000000 00000000 00000000 00000011
^ 00000000 00000000 00000000 00000101
——————————————————————
00000000 00000000 00000000 00000110
应用:
(1)不引入新变量交换两个数的值。
即: a = 3 —————— 00000000 00000000 00000000 00000011
b = 3 —————— 00000000 00000000 00000000 00000101
a = a ^ b—————00000000 00000000 00000000 00000110
b = a ^ b—————00000000 00000000 00000000 00000011 —— 3 ——原 a
a = a ^ b—————00000000 00000000 00000000 00000101 —— 5 ——原 b
已经交换了:a = 5 ,b = 3