左移(<<):相當於乘以2,爲什麼是2,是因爲在二進制下的移位,右邊補零
如:B1100 = 12,
左移1位 ---> 1100 = 12 相當於乘以2
m << 1; m*2
m << n; m*2^n
右移(>>):相當於除以2
如:B1100 = 12,
右移1位---> 110 = 6 相當於除2
m>>n m/2^n
注意符號位,如果是整數就最高位就是1,負數就是-1
int a=xxx
while(a)
{
a = a>>1;
}
如果a是一個負數就是死循環
按位或(|)
1 | 0 = 1
1 | 1= 1
int i = B1100
int j = B1001;
i | j
1 1 0 0
| 1 0 0 1
-------------
1 1 0 1
按位與(&)
1 & 0 = 0
1 & 1 = 1
int i = B1100
int j = B1001;
i & j
1 1 0 0
& 1 0 0 1
-------------
1 0 0 0
^移或(相同爲0,不同爲1)
int i = B1100
int j = B1001;
i ^ j
1 1 0 0
^ 1 0 0 1
-------------
0 1 0 1
設置一個資源的bit5位高電平,其他位不變,注意bit5是從0開始算起
int a
a = (a|(0x << 5)) =====>a | (0x1<<n)
設置一個資源的bit5位低電平,其他位不變
a = a & ~(0x1 << 5) =====> a = a & (~(0x1 << n));