1. 程式人生 > 實用技巧 >C/的常用位運算子

C/的常用位運算子

雙目運算子

位邏輯運算子

有6種位運算:

    &       與運算   
    |       或運算   
    ^       異或運算   
    !      非運算(求補)   
    >>      右移運算   
    <<      左移運算   
  • 與運算(&)
    雙目運算。二個位都置位(等於1)時,結果等於1,其它的結果都等於0。
    1       &       1       ==       1   
    1       &       0       ==       0   
    0       &       1       ==       0   
    0       &       0       ==       0
  • 或運算( | )
    雙目運算。二個位只要有一個位置位,結果就等於1。二個位都為0時,結果為0。
    1       |       1       ==       1   
    1       |       0       ==       1   
    0       |       1       ==       1   
    0       |       0       ==       0
  • 異或運算(^)
    雙目運算。二個位不相等時,結果為1,否則為0。
    1       ^       1       ==       0   
    1       ^       0       ==       1   
    0       ^       1       ==       1   
    0       ^       0       ==       0
  • 非運算(!)
    單目運算。位值取反,置0為1,或置1為0。非運算的用途是將指定位清0,其餘位置1。非運算與數值大小無關。

  • 移位運算(>> 與 <<)
    將位值向一個方向移動指定的位數。右移 >> 運算元從高位向低位移動,左移 << 運算元從低位向高位移動。

  • &,&&,|,||

&&相當一個開關語句,就是說如果&&前面值為false那麼他就不繼續執行後面的表示式;而&不管前面的值為什麼,總是執行其後面的語句。&& 和 || 是boolean的邏輯運算, 返回為bool值 。&是位運算子,它會將兩邊的運算都計算出來,再進行與運算; &是用來處理0101這樣的2進位制字元的位運算的。&&是布林邏輯運算子(短路運算),只要有一邊的運算結果為false,它都會馬上返回false;&&是處理true和false這樣的boolean運算。
同樣的道理,|| 也是布林邏輯運算子,只要有一邊的運算結果是true,它會馬上返回true。

關係運算符

https://baike.baidu.com/item/%E5%85%B3%E7%B3%BB%E8%BF%90%E7%AE%97%E7%AC%A6/352774

算術運算子
乘法運算子【*】、除法運算子【/】、取餘運算子【%】 、加法運算子【+】、減法運算子【-】。

賦值運算子
https://baike.baidu.com/item/%E8%B5%8B%E5%80%BC%E8%BF%90%E7%AE%97%E7%AC%A6/2482721
逗號運算子
https://baike.baidu.com/item/%E9%80%97%E5%8F%B7%E8%BF%90%E7%AE%97%E7%AC%A6/7959271

單目運算子

單目運算子是指運算所需變數為一個的運算子,即在運算當中只有一個運算元,又叫一元運算子,其中有邏輯非運算子:!、按位取反運算子:~、自增自減運算子:++, --等。

三目運算子

對於條件表示式b ? x : y,先計算條件b,然後進行判斷。如果b的值為true,計算x的值,運算結果為x的值;否則,計算y的值,運算結果為y的值。
一個條件表示式絕不會既計算x,又計算y。條件運算子是右結合的,也就是說,從右向左分組計算。例如,a ? b : c ? d : e將按a ? b : (c ? d : e)執行。
<表示式1> ? <表示式2> : <表示式3>; "?"運算子的含義是:先求表示式1的值,如果為真,則執行表示式2,並返回表示式2的結果;如果表示式1的值為假,則執行表示式3,並返回表示式3的結果。
可以理解為條件 ? 結果1 : 結果2 裡面的?號是格式要求。也可以理解為條件是否成立,條件成立為結果1,否則為結果2。
注意:在C語言中,結果1 和 結果2的型別必須一致。

a ? b : c簡單理解方式為:

if(a) {
    return b;
} else {
    return c;
}

一般來說,三目運算子的結合性是右結合的.

運算子優先順序


IN THE END