C語言位運算

左移(<<):相當於乘以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));


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章