第五章 運算子與表示式

2021-06-17 15:07:10 字數 4406 閱讀 2451

你編寫的大多數語句(邏輯行)都包含表示式。乙個簡單的表示式例子如2 + 3。乙個表示式可以分解為運算子和運算元。

運算子 的功能是完成某件事,它們由如+這樣的符號或者其他特定的關鍵字表示。運算子需要資料來進行運算,這樣的資料被稱為 運算元 。在這個例子中,23是運算元。

我們將簡單瀏覽一下運算子和它們的用法:

你可以互動地使用直譯器來計算例子中給出的表示式。例如,為了測試表示式2 + 3,使用互動式的帶提示符的python直譯器:

>>> 2 + 3

5>>> 3 * 5

15>>>

表5.1 運算子與它們的用法

運算子名稱說明例子+

加兩個物件相加

3 + 5得到8。'a' + 'b'得到'ab'。-減

得到負數或是乙個數減去另乙個數

-5.2得到乙個負數。50 - 24得到26。*乘

兩個數相乘或是返回乙個被重複若干次的字串

2 * 3得到6。'la' * 3得到'lalala'。**冪

返回x的y次冪

3 ** 4得到81(即3 * 3 * 3 * 3)/除

x除以y

4/3得到1(整數的除法得到整數結果)。4.0/3或4/3.0得到1.3333333333333333

//取整除

返回商的整數部分

4 // 3.0得到1.0%取模

返回除法的餘數

8%3得到2。-25.5%2.25得到1.5

<<

左移把乙個數的位元向左移一定數目(每個數在記憶體中都表示為位元或二進位制數字,即0和1)

2 << 2得到8。——2按位元表示為10

>>

右移把乙個數的位元向右移一定數目

11 >> 1得到5。——11按位元表示為1011,向右移動1位元後得到101,即十進位制的5。

&按位與

數的按位與

5 & 3得到1。

|按位或

數的按位或

5 | 3得到7。

^按位異或

數的按位異或

5 ^ 3得到6

~按位翻轉

x的按位翻轉是-(x+1)

~5得到-6。

<

小於返回x是否小於y。所有比較運算子返回1表示真,返回0表示假。這分別與特殊的變數true和false等價。注意,這些變數名的大寫。

5 < 3返回0(即false)而3 < 5返回1(即true)。比較可以被任意連線:3 < 5 < 7返回true。

>

大於返回x是否大於y

5 > 3返回true。如果兩個運算元都是數字,它們首先被轉換為乙個共同的型別。否則,它總是返回false。

<=

小於等於

返回x是否小於等於y

x = 3; y = 6; x <= y返回true。

>=

大於等於

返回x是否大於等於y

x = 4; y = 3; x >= y返回true。

==等於

比較物件是否相等

x = 2; y = 2; x == y返回true。x = 'str'; y = 'str'; x == y返回false。x = 'str'; y = 'str'; x == y返回true。

!=不等於

比較兩個物件是否不相等

x = 2; y = 3; x != y返回true。

not布林「非」

如果x為true,返回false。如果x為false,它返回true。

x = true; not x返回false。

and布林「與」

如果x為false,x and y返回false,否則它返回y的計算值。

x = false; y = true; x and y,由於x是false,返回false。在這裡,python不會計算y,因為它知道這個表示式的值肯定是false(因為x是false)。這個現象稱為短路計算。

or布林「或」

如果x是true,它返回true,否則它返回y的計算值。

x = true; y = false; x or y返回true。短路計算在這裡也適用。

下面這個表給出python的運算子優先順序,從最低的優先順序(最鬆散地結合)到最高的優先順序(最緊密地結合)。這意味著在乙個表示式中,python會首先計算表中較下面的運算子,然後在計算列在表上部的運算子。

下面這張表(與python參考手冊中的那個表一模一樣)已經顧及了完整的需要。事實上,我建議你使用圓括號來分組運算子和運算元,以便能夠明確地指出運算的先後順序,使程式盡可能地易讀。例如,2 + (3 * 4)顯然比2 + 3 * 4清晰。與此同時,圓括號也應該正確使用,而不應該用得過濫(比如2 + (3 + 4))。

表5.2 運算子優先順序

運算子描述lambda

lambda表示式

or布林「或」

and布林「與」

not x

布林「非」

in,not in

成員測試

is,is not

同一性測試

<,<=,>,>=,!=,==比較|

按位或^

按位異或

&按位與

<<,>>

移位+,-

加法與減法

*,/,%

乘法、除法與取餘

+x,-x

正負號~x

按位翻轉

**指數

x.attribute

屬性參考

x[index]

下標x[index:index]

定址段f(arguments...)

函式呼叫

(experession,...)

繫結或元組顯示

[expression,...]

列表顯示

字典顯示

'expression,...'

字串轉換

其中我們還沒有接觸過的運算子將在後面的章節中介紹。

在表中列在同一行的運算子具有 相同優先順序 。例如,+-有相同的優先順序。

預設地,運算子優先順序表決定了哪個運算子在別的運算子之前計算。然而,如果你想要改變它們的計算順序,你得使用圓括號。例如,你想要在乙個表示式中讓加法在乘法之前計算,那麼你就得寫成類似(2 + 3) * 4的樣子。

運算子通常由左向右結合,即具有相同優先順序的運算子按照從左向右的順序計算。例如,2 + 3 + 4被計算成(2 + 3) + 4。一些如賦值運算子那樣的運算子是由右向左結合的,即a = b = c被處理為a = (b = c)

例5.1 使用表示式

#!/usr/bin/python

# filename: expression.py

length =5

breadth =2

area = length * breadth

print'area is', area

print'perimeter is',2* (length + breadth)

(原始檔:code/expression.py)

$ python expression.py

area is 10

perimeter is 14

矩形的長度與寬度儲存在以它們命名的變數中。我們借助表示式使用它們計算矩形的面積和邊長。我們表示式length * breadth的結果儲存在變數area中,然後用print語句列印。在另乙個列印語句中,我們直接使用表示式2 * (length + breadth)的值。

另外,注意python如何列印「漂亮的」輸出。儘管我們沒有在'area is'和變數area之間指定空格,python自動在那裡放了乙個空格,這樣我們就可以得到乙個清晰漂亮的輸出,而程式也變得更加易讀(因為我們不需要擔心輸出之間的空格問題)。這是python如何使程式設計師的生活變得更加輕鬆的乙個例子。

我們已經學習了如何使用運算子、運算元和表示式——這些使任何程式的基本組成部分。接下來,我們將學習如何通過語句在我們的程式中使用這些部分。

第五章 運算子

基本運算子 1,賦值運算子 雙目運算子,將可修改的左值賦給右邊變數。2,加法和減法運算子 雙目運算子 3,符號運算子 單目運算子 4,乘法運算子 雙目運算子 5,除法運算子 雙目運算子 優先順序和求值順序 示例程式 優先順序規則的試驗 include int main 當運算子共享乙個運算元時,按照...

第五章 表示式

表示式這章比較簡單,一般有過c的基礎的人都應該問題不大,要知道連我都覺得比較簡單,相信你們肯定更加容易了。new和delete表示式 動態建立和釋放陣列,定義變數時,必須指定其資料型別和名字。然而動態建立物件時,只需要指定其資料型別,而不必為該物件命名。取而代之的是,new表示式返回值指向新建立物件...

高階C語言第五章 運算子 表示式和語句

基本運算子 運算子表四算術運算。pow 用於指數運算。1 賦值預算符 目的 把值儲存到記憶體位置上,資料物件 用於儲存值 的資料儲存區域。左值 用於標識 特定的資料物件 的名稱或表示式 標籤 可修改的左值。用於標識可修改的物件。右值 能賦給可修改左值的量。可以是常量 變數 可求值的表示式。表示式的值...