Lua 運算符
運算子是一個特殊的符號,用來告訴解釋器執行特定的數學或邏輯運算。 Lua提供了以下幾種運算子類型:
算術運算子
關係運算子
邏輯運算子
其他運算子
#算術運算子
下表列出了Lua語言中常用的算術運算符,設定A 的值為10,B 的值為20:
運算子 | 描述 | 實例 |
---|---|---|
+ | 加法 | A + B 輸出結果30 |
- | 減法 | A - B 輸出結果-10 |
* | A * B 輸出結果200 | |
/ | 除法 | B / A w輸出結果2 |
% | 取餘 | B % A 輸出結果0 |
^ | 乘冪 | ##A^2 輸出結果100|
負號 | -A 輸出結果v -10 |
a = 21 b = 10 c = a + b print("Line 1 - c 的值为 ", c ) c = a - b print("Line 2 - c 的值为 ", c ) c = a * b print("Line 3 - c 的值为 ", c ) c = a / b print("Line 4 - c 的值为 ", c ) c = a % b print("Line 5 - c 的值为 ", c ) c = a^2 print("Line 6 - c 的值为 ", c ) c = -a print("Line 7 - c 的值为 ", c )以上程式執行結果為:
Line 1 - c 的值为 31 Line 2 - c 的值为 11 Line 3 - c 的值为 210 Line 4 - c 的值为 2.1 Line 5 - c 的值为 1 Line 6 - c 的值为 441 Line 7 - c 的值为 -21
關係運算子
下表列出了Lua 語言中的常用關係運算符,設定A 的值為10,B 的值為20:
描述 | 實例 | |
---|---|---|
#等於,偵測兩個值是否相等,相等回傳true,否則傳回false | (A == B) 為false。 | |
不等於,偵測兩個值是否相等,相等回傳false,否則傳回true< | (A ~= B)為true。 | |
大於,如果左邊的值大於右邊的值,回傳true,否則回傳false | (A > B) 為false。 | |
小於,如果左邊的值大於右邊的值,回傳false,否則回傳true | (A < B) 為true。 | |
大於等於,如果左邊的值大於等於右邊的值,回傳true,否則回傳false | (A > = B) 回傳false。 | |
小於等於, 如果左邊的值小於等於右邊的值,回傳true,否則回傳false | (A < = B) 傳回true。 |
運算子 | 描述 | 實例 |
---|---|---|
and | 邏輯與運算子。 如果兩邊的操作都為 true 則條件為 true。 | (A and B) 為 false。 |
or | 邏輯或運算子。 如果兩邊的操作任一一個為 true 則條件為 true。 | (A or B) 為 true。 |
not | 邏輯非運算子。與邏輯運算結果相反,若條件為 true,邏輯非為 false。 | not(A and B) 為 true。 |
實例
我們可以透過以下實例來更徹底的理解邏輯運算子的應用:
a = true b = true if ( a and b ) then print("a and b - 条件为 true" ) end if ( a or b ) then print("a or b - 条件为 true" ) end print("---------分割线---------" ) -- 修改 a 和 b 的值 a = false b = true if ( a and b ) then print("a and b - 条件为 true" ) else print("a and b - 条件为 false" ) end if ( not( a and b) ) then print("not( a and b) - 条件为 true" ) else print("not( a and b) - 条件为 false" ) end
以上程式執行結果為:
a and b - 条件为 true a or b - 条件为 true ---------分割线--------- a and b - 条件为 false not( a and b) - 条件为 true
其他運算子
下表列出了Lua 語言中的連接運算子與計算表或字串長度的運算子:
運算子 | 描述 | #實例 |
---|---|---|
#.. | 連接兩個字串 | a..b ,其中a 為"Hello " , b 為"World", 輸出結果為"Hello World"。 |
#一元運算符,傳回字串或表格的長度。 | #"Hello" 傳回5 |
實例
我們可以透過以下實例來更徹底的理解連線運算子與計算表或字串長度的運算子的應用:
a = "Hello " b = "World" print("连接字符串 a 和 b ", a..b ) print("b 字符串长度 ",#b ) print("字符串 Test 长度 ",#"Test" ) print("w3cschoolphp中文网网址长度 ",#"www.w3cschool.cc" )
以上程式執行結果為:
连接字符串 a 和 b Hello World b 字符串长度 5 字符串 Test 长度 4 w3cschoolphp中文网网址长度 16
運算子優先權
從高到低的順序:
^ not - (unary) * / + - .. < > <= >= ~= == and or
除了^和..外所有的二元運算子都是左連接的。
a+i < b/2+1 <--> (a+i) < ((b/2)+1) 5+x^2*8 <--> 5+((x^2)*8) a < y and y <= z <--> (a < y) and (y <= z) -x^2 <--> -(x^2) x^y^z <--> x^(y^z)
實例
我們可以透過以下實例來更徹底的了解Lua 語言運算子的優先權:
a = 20 b = 10 c = 15 d = 5 e = (a + b) * c / d;-- ( 30 * 15 ) / 5 print("(a + b) * c / d 运算值为 :",e ) e = ((a + b) * c) / d; -- (30 * 15 ) / 5 print("((a + b) * c) / d 运算值为 :",e ) e = (a + b) * (c / d);-- (30) * (15/5) print("(a + b) * (c / d) 运算值为 :",e ) e = a + (b * c) / d; -- 20 + (150/5) print("a + (b * c) / d 运算值为 :",e )
以上程式執行結果為:
(a + b) * c / d 运算值为 : 90.0 ((a + b) * c) / d 运算值为 : 90.0 (a + b) * (c / d) 运算值为 : 90.0 a + (b * c) / d 运算值为 : 50.0