位运算基础

98 阅读1分钟

1. 补码

32位 int 表示的整数的范围是[-2147483648, 2147483647]

存储的二进制用补码来表示。

  • 对于正数,原码 = 反码 = 补码。

  • 对于负数,原码第一位置为1,表示负号。反码 = 原码除了符号位之外都翻转,补码 = 反码最后一位+1。

  • 特别的,-2147483648 的补码是 1000....0000

2. 运算符>> << >>> <<<

  • ">>" :带符号右移。正数右移高位补0,负数右移高位补1

  • ">>>" :不带符号右移。右移高位统统补0

3. 运算符& ^

  • & 与
  • ^ 异或,a⊕0 = aa⊕a = 0