一、运算符

  • &:按位与
  • |:按位或
  • ^:按位异或
  • ~:按位取反
  • <<:左移N
  • >>:带符号右移N

二、运算规则

  1. &与运算:对应的两个二进位均为1时,结果为1,否则为0。(有假为假) 
  2. |或运算:对应的两个二进位有一个为1时,结果位就为1,否则为0。(有真为真) 
  3. ^异或运算:对应的二进位不同时为1,否则为0。(不同为真,相同为假) 
  4. ~取反运算:对整数的各二进位进行取反,包括符号位(0变1,1变0,真假互换) 
  5. <<左移:把整数的各二进位全部左移n位,高位丢弃(包括符号位),低位补0。 
    左移n位其实就是乘以2的n次方(但移动后符号位变化除外,符号位改变则正负改变)  
  6. >>右移:把整数的各二进位全部右移n位,符号位不变。高位的空缺是正数补0; 
    是负数高位是补0或是补1 取决于编译系统的规定;右移n位其实就是除以2的n次方

三、优先级

优先级

四、实际应用

例:~(~0<<8) = 255
这里以C语言中int型变量(4字节)举例子,根据优先级,先进行括号里的,先取反:
~0 = 11111111 11111111 11111111 11111111

再进行括号里的左移四位:
~0 << 4 = 11111111 11111111 11111111 00000000

最后再进行外面一层的取反:
~(~0<<4) = 00000000 00000000 00000000 11111111 = 255(十进制)