按位运算

按位与&

如果(x)i == 1 并且(y)i == 1,那么(x & y)i = 1,否则(x & y)i = 0;按位同为1即为1 否则为0;

  • 按位与常用于两种应用:
  • 让某一位或某些位为0 :x & 0xFE
  • 取一个数中的一段: x & 0xFF

按位或 |

如果(x)i == 1 或 (y)i == 1,那么(x | y)i = 1,否则 (x | y)i = 0;按位有1则为1,否则为0

  • 按位或长用于两种应用
  • 使得一位或几个位为1: x | 0x01
  • 把两个数拼起来: 0x00ff | 0xff00

按位取反 ~

(~x)i = 1 - (x)i; 把1变成0,0变成1;

  • 想得到全部位为1的数: ~0;
  • 7的二进制是0111,x|7使得低3位为1,而x & ~7,就使得低3位为0

按位异或 ^

如果(x)i == (y)i,那么(x ^ y)i = 0,否则,(x ^ y)i = 1;按位相同为0,否则为1;

  • 如果x和y相等,那么x^y的结果为0;
  • 对一个变量用同一个值异或两次,等于什么也没做(原值),即 x ^ y ^ y = x.

左移<<

i << j

  • i中所有的位向左移动j个位置,右边填入0;
  • 所有小于int的类型,移位以int的方式来做,结果是int
  • x << 1 等价于 x *= 2
  • x << n 等价于 x *= 2^n

右移>>

i >> j

  • i中所有的位向右移动j个位置,左边填入0;
  • 所有小于int的类型,移位以int的方式来做,结果是int
  • 对于unsigned的类型,左边填入0
  • 对于signed的类型,左边填入原来的最高位(保持符号不变)
  • x >> 1 等价于 x /= 2
  • x >> n 等价于 x /= 2^n

你可能感兴趣的:(按位运算)