按位或
| :
任何数 | 0为他本身,任何数 | 1为 0
如置二进制某位切1操作:
#define SET(a,num) (x) |=(1<<(n-1))
按位与
& :
任何数 & 1为他本身,任何数 & 0为 0
如置二进制某位切0操作:
#define SET(a,num) (x) &=(~(1<<(n-1)))
按位异或
^ :
相同为0,相异为1,任何数^0为他本身
<u>注意,位运算都遵循结合律和交换律</u>!
隐式整型提升
比如一个 char 类型变量 a 大小为 1,但是对 a 进行位运算~,<<,>>等,其 大小都会变成 4 ,原因就是位运算是由 CPU 来完成,而数据在 CPU 中只能以整型的形式存在,这里发生了隐式整型提升。
左右移