位運算符分析

位運算符對bit位進行操作,效率最高

&按位與

|  按位或

^  按位異或

~ 取反

<<  左移------>左移操作數必須爲整數類型,char和short被隱式轉化爲int後進行位操作

              規則:高位丟棄,低位補0

             左移n相當於乘以2的n次方,但效率比數學運算符高

>>   右移------->右操作數的範圍必須爲【0,31】

             規則:高位補符號位,低位丟棄

            右移相當於除以2的n次方,但效率比數學運算符高

     printf("%d\n", 3 << 2); ----->12
    printf("%d\n", 3 >> 1); ----->1
    printf("%d\n", -1 >> 1); ----->-1
    printf("%d\n", 0x01 << 2 + 3);----->32
   
    printf("%d\n", 3 << -1); // oops!------>1


位運算與邏輯運算不同:

   位運算沒有短路規則,每個操作數都參與運算

   位運算的結果爲整數,而不是0或1

  位運算優先級高於邏輯運算優先級(運算優先級:四則運算>位運算>邏輯運算)



例:(交換兩個參數的值的三種算法)

#define SWAP1(a, b)    \
{                      \
    int t = a;         \
    a = b;             \
    b = t;             \
}

#define SWAP2(a, b)    \
{                      \
    a = a + b;         \
    b = a - b;         \
    a = a - b;         \
}

#define SWAP3(a, b)    \
{                      \
    a = a ^ b;         \
    b = a ^ b;         \
    a = a ^ b;         \
}



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