基础位运算符
1.按位与
符号: &
说明:把参与运算的两个数对应的二进制位相与。只有两个二进制均为1时,结果的对应位才是1,否则为0.
例子:当 5&9 时:
5的二进制:0000 0101;9的二进制:0000 1001;
2.按位或
符号: |
说明:把参与运算的两个数对应的二进制位相或。只要对应的两个二进制位有一个为1时,其结果就为1.
例子:当 5|9 时:
3.按位异或 (疑惑)
符号: ^ (xor)
说明:把参与运算的两个数对应的二进制位相异或,当对应的二进制位上的数据字不相同时,结果对应为1,否则为0.
一些简单的例子:1 xor 1 = 0, 1 xor 0 = 1, 0 xor 0 = 0, 0 xor 1 = 1
例子:
4.取反
符号:~
说明:把运算数的各个二进制按位求反。
例子:
5.移位
-
左移(<<)
说明:把"<<"左边的运算数的各二进制位向左移若干位,"<<"右边的数是指定移动的位数,高位丢弃,低位补0。
例子:a<<4指把a的各二进位向左移动4位,如 a = 0000 0011(十进制为3),左移4位后为 0011 0000(十进制为48)。
-
右移(>>)
说明:把">>"左边的运算数的各二进制位全部右移若干位,">>"右边的数是指定移动的位数。
例子:设 \(a=15\),\(a>>2\) 表示把 0000 1111 右移为 0000 0011(十进制为3)
算数右移等于除以 2 向下取整,\((-3) >> 1 = -2\), \(3 >> 1 = 1\)。
整数除以 2 在 C++ 中实现为 “除以 2 向零取整”,\((-3)/2=-1\),\(3/2=1\)。
-
简便的运算方法:
\[a<<n =a*2^n \]\[a>>n=a*\frac{1}{2^n} \]
说明
需要说明的是,对于有符号数,在右移时,符号位将随同移动。当操作数为正数时,最高位为 0 ,而为负数时,最高位为 1 。最高位是补 0 或补 1 取决于编译系统的规定。
EdisonBa
2020.8.16