C操作員

C運算符和運算符優先級簡介

C為我們提供了各種各樣的運算符,可用於對數據進行運算。

特別是,我們可以識別各種類型的運算符:

  • 算術運算符
  • 比較運算符
  • 邏輯運算符
  • 複合賦值運算符
  • 按位運算符
  • 指針經營者
  • 結構算子
  • 雜項運算符

在此博客文章中,我將使用2個虛構變量來詳細說明所有這些變量ab作為例子。

我將按位運算符,結構運算符和指針運算符排除在此列表之外,因為我將專門為他們寫一篇特定的博客文章。

算術運算符

在這個宏組中,我將分開二進制運算符和一元運算符。

二進制運算符使用兩個操作數進行工作:

操作員 姓名 例子
= 任務 a = b
+ 添加 a + b
- 減法 a - b
* 乘法 a * b
/ 分配 a / b
% 模數 a % b

一元運算符只能使用一個操作數:

操作員 姓名 例子
+ 一元加 +a
- 一元減 -a
++ 增量 a++或者++a
-- 減量 a--或者--a

和...之間的不同a++++a就是它a++增加a使用後的變量。++a增加a變量,然後再使用它。

例如:

int a = 2;
int b;
b = a++ /* b is 2, a is 3 */
b = ++a /* b is 4, a is 4 */

遞減運算符也是如此。

比較運算符

操作員 姓名 例子
== 平等算子 a == b
!= 不等於運算符 a != b
> 大於 a > b
< 少於 a < b
>= 大於或等於 a >= b
<= 小於或等於 a <= b

邏輯運算符

  • !不(示例:!a
  • &&AND(例如:a && b
  • ||或(例如:a || b

當使用布爾值時,這些運算符非常有用。

複合賦值運算符

這些運算符對於執行分配和同時執行算術運算非常有用:

操作員 姓名 例子
+= 加法分配 a += b
-= 減法分配 a -= b
*= 乘法分配 a *= b
/= 部門分配 a /= b
%= 模分配 a %= b

雜項運營商

三元運算符

三元運算符是C可以使用3個操作數,這是表達條件的一種簡短方法。

看起來是這樣的:

<condition> ? <expression> : <expression>

例子:

a ? b : c

如果a被評估為true,然後b語句已執行,否則c是。

三元運算符在功能上與if / else條件相同,只不過它的表示時間較短,可以內聯到表達式中。

大小

sizeof運算符返回您傳遞的操作數的大小。您可以傳遞變量,甚至可以傳遞類型。

用法示例:

#include <stdio.h>

int main(void) {
  int age = 37;
  printf("%ld\n", sizeof(age));
  printf("%ld", sizeof(int));
}

運算符優先級

對於所有這些運算符(以及我在本文中未介紹的更多運算符,包括按位運算符,結構運算符和指針運算符),在單個表達式中一起使用它們時,必須注意。

假設我們執行以下操作:

int a = 2;
int b = 4;
int c = b + a * a / b - a;

有什麼價值c?我們在加法和除法之前執行加法嗎?

有一套規則可以幫助我們解決這個難題。

為了從低優先級到高優先級,我們有:

  • =賦值運算符
  • +- 二進制的經營者
  • */經營者
  • +-一元運算符

運算符還具有關聯規則,除一元運算符和賦值外,該規則始終從左到右。

在:

int c = b + a * a / b - a;

我們先執行a * a / b,由於是從左到右,我們可以將其分為a * a和結果/ b2 * 2 = 44 / 4 = 1

然後我們可以進行加法和減法:4 +1-2。c3

但是,在所有情況下,我都想確保您意識到可以使用括號使任何相似的表達式更易於閱讀和理解。

括號比其他任何東西都具有更高的優先級。

上面的示例表達式可以重寫為:

int c = b + ((a * a) / b) - a;

而且我們不必考慮太多。

免費下載我的C手冊


更多clang教程: