搞不清的这几个运算符。。。

&,|,^,~,<<,>>
记录下这几个运算符的使用,它们都是基于二进制位进行操作的。

& 与

当两个位都为 1 时,则结果位为 1 。

例:0&0=0 0&1=0 1&1=1 3&15=3(11&1111=11)

用途:

  • 指定某一位清 0
  • 取一个数的某几个位
  • 判断奇偶,根据最未位是0还是1来决定。

| 或

两个位都为 0 时,结果才为 0 。

例:0|0=0 0|1=1 1|0=1 1|1=1

用途:

  • 将某些位设置为 1 。

^ 异或

两个相应位相同为 0 ,相异为 1 。

例:0^0=0 0^1=1 1^0=1 1^1=0

用途:

  • 翻转指定位
  • 交换两个数

~ 取反

对一个二进制数按位取反,即将0变1,1变0。

例:~1=0 ~0=1

用途:

  • 负数取反加一等于该数的补码。

<< 左移

将一个运算对象的各二进制位全部左移若干位(左边的二进制位丢弃,右边补0)。

例:设 a=1010 1110,a = a<< 2 将a的二进制位左移2位、右补0,即得a=1011 1000。

用途:

  • 若左移时舍弃的高位不包含1,则每左移一位,相当于该数乘以2。

>> 右移

将一个数的各二进制位全部右移若干位,正数左补0,负数左补1,右边丢弃。

例:a=a>>2 将a的二进制位右移2位,左补0 或者 左补1得看被移数是正还是负。

用途:

  • 操作数每右移一位,相当于该数除以2。