位运算

位运算

数值转换为二进制格式’逐位’进行的运算

  • ‘&’ 与 ((n&8)==8) !(n&8)
  • ‘|’ 或
  • ‘^’ 异或
  • ‘~’ 取反
  • ‘<<’ 左移
  • ‘>>’ 右移
  • ‘’
  • ‘’
  • ‘’

& 与

1234
4 * 10^0
3 * 10^1
2 * 10^2
1 * 10^3

1 2
2 4
3 8
4 16
5 32
6 64
7 128
8 256
9 512
10 1024

101000
000001

000001 =0,1

掩码操作

前三位为网络地址,第四位为主机地址
192.168.1.101 255.255.255.0
192.168.1.102 255.255.255.0
192.168.1.103 255.255.255.0

xxxx xxxx
0000 0000
---------
0000 0000

|或

叠加

1   0001    响铃 
2   0010    震动 
4   0100    LED 
8   1000    其他

    0011

判断某种状态是否启用

    (v & 2) == 2
    0011
    0010
    ----
    0010

^异或(相同为0,不同为1)

1010 a 0110
1100 b 1100


0110 a^b 1010

1100
1100

0000 相同的值异或得 0

~ 取反

  • 正数 按位取反加一
    // 0000 0011 3
    //~a
    // 1111 1100 符号位1,负数,读:按位取反并加一
    // 1000 0100 -4
  • 负数 变符号位减一

左移、右移

// 0000 1001
// 0001 0010    左移 *2
// 1000 0100    右移 /2取整

循环