C語言操作符有以下分類:
算數操作符 移位操作符 位操作符 賦值操作符 單目操作符 關係操作符 邏輯操作符 條件操作符 逗號操作符 下標引用 、函數調用和結構成員
一、算數操作符
加(+) 減(-) 乘(*) 除(/) 求模(%)
1)%操作符只能用於兩個整數之間的運算,其他的操作符可以作用於整數和浮點數。
2)對於/操作符,當兩個操作數都是整數時執行整數除法。只要有一個操作數是浮點數就是浮點數除法。
3)%操作符參與運算的兩個整數返回的是整除之後的餘數,/操作符參與運算的兩個整數返回的是整除之後的商。
二、移位操作符
左移操作符(<<):左邊拋棄,右邊補0
右移操作符(>>):1)邏輯移位--左邊用0填充,右邊丟棄
2)算術移位:左邊用原該值的符號位填充,右邊丟棄
三、位操作符
按位與(&) 按位或(|) 按位異或(^)
1)位操作符他們的操作數必須都是整數。
2)參與運算的操作數,是將他們的二進制(比特位)進行逐位運算。
3)&操作符只有當兩個比特位都是1時與的結果才爲1,以外均爲0。
4)| 操作符只有當兩個比特位都是0時或的結果才爲0,以外均爲1。
5)^操作符參與運算的是兩個相同的操作數結果就會清零,任一個數與0按位異或得到的二進制序列不變,與1按位異或得到的二進制序列每位均取反。
四、賦值操作符
只有賦值操作符(=)可以讓你改變一個你之前不滿意的值。任何兩個操作數參與運算時只要不經過賦值運算,這兩個操作數其自身的值是不會發生變化的!
注意:賦值運算和初始化是兩個不同的概念!初始化時(int i=0;),系統會爲這個變量(i)開闢空間同時默認這是空間的值(0)。而賦值運算時(i=1;),是將這個空間的值改變(將1改爲0)。
複合賦值符:+= -= *= /= %= >>= <<= &= |= ^=
五、單目操作符
邏輯反(!) 負值(-) 正值(+) 取地址(+) 求操作數的類型長度(sizeof) 對一個數的二進制數按位取反(~) 自增運算(++) 自減運算(--) 間接訪問操作符、解引用操作符(*) 強制類型轉換((類型))
1)以上操作符參與運算的只需要一個操作數即可。
2)自增操作符分爲前置和後置,前置是先將值進行+1操作,然後再去用這個數。後置是先將數拿出來去使用,使用完了之後再進行+1操作。
3)強制類型轉換僅僅改變了空間的類型,並沒有改變這個數據,和轉化是不同的概念。
4)切記sizeof是操作符,並不是一個函數。
六、關係操作符
大於(>) 大於等於(>=) 小於(<) 小於等於(<=) 相等(==) 不相等(!=)
1)對浮點數來說要特別注意,並沒有嚴格意義上的相等。它是用精度範圍來判斷兩個數是相等的。
2)執行相等操作(==)時,可能會不小心寫成賦值操作(=)。例如:if(x=5)//處理事務
因此建議做相等比較時,將常數寫在左邊(5==x)。例如:if(5==x)//處理事務
這樣不小心輸錯成if(5=x),系統就能在編譯時報錯
七、邏輯操作符
邏輯與(&&) 邏輯或(||)
1)&&操作符前後兩個操作數均爲真結果才爲真。
2)|| 操作符前後兩個操作數均爲假結果才爲假。
3)邏輯與和按位與是不同的概念,前者的結果是布爾型,不是1(真)就是0(假),而後者是將二進制進行逐位運算的,結果是個數。
八、條件操作符
exp1 ? exp2 : exp3 ;
三目運算符:當exp1爲真時結果爲exp2,假時結果爲exp3
類似於:if(exp1) {exp2} else {exp3}
九、逗號表達式
exp1,exp2,exp3,……expN
1)逗號表達式,就是用逗號隔開多個表達式。
2)逗號表達式,從左向右依次執行。整個表達式的結果是最後一個表達式的結果。
十、下標引用、函數調用和結構成員
1)[ ]
操作數:一個數組名+一個索引值
2)( )
函數調用操作符
一個或者多個操作數:第一個操作數是函數名,剩餘的操作數就是傳遞給函數的參數。
3)訪問一個結構體的成員
. 結構體 . 成員名(通過結構體直接訪問內部元素)
-> 結構體指針 -> 成員名(通過指針訪問結構體內部元素)
注意:結構體、數字、指針都屬於數據類型,只不過是自定義數據類型