你編寫的大多數語句(邏輯行)都包含表示式。乙個簡單的表示式例子如2 + 3
。乙個表示式可以分解為運算子和運算元。
運算子 的功能是完成某件事,它們由如+
這樣的符號或者其他特定的關鍵字表示。運算子需要資料來進行運算,這樣的資料被稱為 運算元 。在這個例子中,2
和3
是運算元。
我們將簡單瀏覽一下運算子和它們的用法:
你可以互動地使用直譯器來計算例子中給出的表示式。例如,為了測試表示式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 賦值預算符 目的 把值儲存到記憶體位置上,資料物件 用於儲存值 的資料儲存區域。左值 用於標識 特定的資料物件 的名稱或表示式 標籤 可修改的左值。用於標識可修改的物件。右值 能賦給可修改左值的量。可以是常量 變數 可求值的表示式。表示式的值...