跟著肯哥(不是我)學運算符與表達式
運算符
在C語言中,運算符是一種用來執行特定操作的符號或關鍵字。它們用于對變量、常量和表達進行計算、邏輯判斷和位操作等。
定義一般都當耳旁風了
運算符分類
算術運算符
+-*/%
加減乘除取模,這沒啥好說的
邏輯運算符:
- 與:
&&
- 或:
||
- 非:
!
這個遵循短路原則,算到前面的時候運算符結果已經確定了,就不會再判斷后面的條件。
比如:與運算第一個條件為假,就沒必要看第二個條件了
關系運算符
- 等于
==
- 不等于
!=
- 大于
>
- 小于
<
- 大于等于
>=
- 小于等于
<=
與小學數學規則相同,也沒什么好說的
位運算符
- 按位與
&
- 按位或
|
- 按位異或
^
- 左移
<<
- 右移
>>
對同一個變量進行兩次異或可以得到原來的值,可以用于簡單的對稱加密
賦值運算
- 賦值
=
- 復合賦值
+=
、-=
、*=
、/=
、%=
、&=
、|=
、^=
、<<=
、>>=
也沒啥好說的
其他運算符
- 返回變量或數據類型的大小
sizeof
- 取地址
&
- 指針
*
- 條件表達式
?:
- 逗號運算符
,
這些也是運算符,這件事,我之前是沒想過的。
運算符的優先級順序
這我直接復制粘貼了,猜你也記不住
以下是常見運算符按照優先級從高到低的順序:
- 圓括號:
()
括號可以用于明確指定運算的優先級,可以改變默認的優先級規則。 - 單目運算符:
++
、--
(前綴和后綴遞增遞減)、+
(正號)、-
(負號)、!
(邏輯非)、~
(位求反)。 - 算術運算符:
*
(乘法)、/
(除法)、%
(取模)。 - 加減運算符:
+
(加法)、-
(減法)。 - 移位運算符:
<<
(左移)和>>
(右移)。 - 關系運算符:
>
(大于)、<
(小于)、>=
(大于等于)、<=
(小于等于)。 - 相等性運算符:
==
(等于)、!=
(不等于)。 - 位運算符:
&
(按位與)、^
(按位異或)、|
(按位或)。 - 邏輯運算符:
&&
(邏輯與)和||
(邏輯或)。 - 條件運算符:
?:
(三元運算符)。 - 賦值運算符:
=
(賦值)、+=
、-=
、*=
、/=
、%=
、&=
、^=
、|=
、<<=
、>>=
。 - 逗號運算符:逗號用于分隔表達式,并按照從左到右的順序進行求值。
表達式
表達式是由運算符、操作數和函數調用組成的代碼片段,用于執行特定的計算或操作。表達式可以是簡單的變量、常量,也可以是由運算符連接起來的復雜的組合。
定義就當耳旁風略過了,下面也是從講義搬運過來的:
- 算術表達式(Arithmetic Expressions):由算術運算符(如
+
、-
、*
、/
、%
)和操作數(變量或常量)組成的表達式。算術表達式用于執行基本的數學運算,如加減乘除等。 - 邏輯表達式(Logical Expressions):由邏輯運算符(如
&&
、||
、!
)和操作數(變量或常量)組成的表達式。邏輯表達式用于執行邏輯判斷,返回布爾值(true
或false
)。 - 關系表達式(Relational Expressions):由關系運算符(如
==
、!=
、>
、<
、>=
、<=
)和操作數(變量或常量)組成的表達式。關系表達式用于比較操作數之間的關系,返回布爾值。 - 位運算表達式(Bitwise Expressions):由位運算符(如
&
、|
、^
、<<
、>>
)和操作數(變量或常量)組成的表達式。位運算表達式用于對操作數的內部位進行操作,通常用于位級的操作和優化。 - 條件表達式(Conditional Expressions):也稱為三元表達式(Ternary Expression),由條件運算符(
? :
)和三個操作數組成的表達式。條件表達式根據一個條件的結果,選擇返回兩個操作數中的一個。 - 賦值表達式(Assignment Expressions):由賦值運算符(
=
、+=
、-=
、*=
、/=
、%=
等)和操作數組成的表達式。賦值表達式用于將一個值或表達式的結果賦給變量。 - 逗號表達式(Comma Expressions):它是一種特殊的表達式,它由逗號操作符(
,
)分隔的多個子表達式組成。逗號表達式的求值過程從左到右依次求值每個子表達式,并將最后一個子表達式的結果作為整個逗號表達式的結果。
int result =func1(),func2(),func3();
上述代碼中,逗號操作符使得三個函數調用依次執行,且整個語句的結果是最后一個函數的返回值。
這里我想補充的是,鏈式調用。表達式中含有自定義數據類型的時候,應該注意表達式的返回值類型。
比如在C++中,返回的可能是個流對象,而且是全局唯一的對象。
欣賞一段有意思的代碼
新手寫這樣的代碼:亂七八糟
大佬寫這樣的代碼:優雅