# 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) is not true. |
| <= | 小于等于, 如果左邊的值小于等于右邊的值,返回 true,否則返回 false | (A <= B) is true. |
### 實例
我們可以通過以下實例來更加透徹的理解關系運算符的應用:
~~~
~~~
a?=?21
b?=?10
if(?a?==?b?)
then
???print("Line?1?-?a?等于?b"?)
else
???print("Line?1?-?a?不等于?b"?)
end
if(?a?~=?b?)
then
???print("Line?2?-?a?不等于?b"?)
else
???print("Line?2?-?a?等于?b"?)
end
if?(?a?<?b?)
then
???print("Line?3?-?a?小于?b"?)
else
???print("Line?3?-?a?大于等于?b"?)
end
if?(?a?>?b?)?
then
???print("Line?4?-?a?大于?b"?)
else
???print("Line?5?-?a?小于等于?b"?)
end
--?修改?a?和?b?的值
a?=?5
b?=?20
if?(?a?<=?b?)?
then
???print("Line?5?-?a?小于等于??b"?)
end
if?(?b?>=?a?)?
then
???print("Line?6?-?b?大于等于?a"?)
end
~~~
~~~
以上程序執行結果為:
~~~
~~~
Line?1?-?a?不等于?b
Line?2?-?a?不等于?b
Line?3?-?a?大于等于?b
Line?4?-?a?大于?b
Line?5?-?a?小于等于??b
Line?6?-?b?大于等于?a
~~~
~~~
### 邏輯運算符
下表列出了 Lua 語言中的常用邏輯運算符,設定 A 的值為10,B 的值為 20:
| 操作符 | 描述 | 實例 |
|-----|-----|-----|
| and | 邏輯與操作符。 如果兩邊的操作都為 true 則條件為 true。 | (A and B) 為 false。 |
| or | 邏輯或操作符。 如果兩邊的操作任一一個為 true 則條件為 true。 | (A or B) 為 true。 |
| not | 邏輯非操作符。與邏輯運算結果相反,如果條件為 true,邏輯非為 false。 | !(A and B) 為 false。 |
### 實例
我們可以通過以下實例來更加透徹的理解邏輯運算符的應用:
~~~
~~~
a?=?5
b?=?20
if?(?a?and?b?)
then
???print("Line?1?-?條件為?true"?)
end
if?(?a?or?b?)
then
???print("Line?2?-?條件為?true"?)
end
--?修改?a?和?b?的值
a?=?0
b?=?10
if?(?a?and?b?)
then
???print("Line?3?-?條件為?true"?)
else
???print("Line?3?-?條件為?false"?)
end
if?(?not(?a?and?b)?)
then
???print("Line?4?-?條件為?true"?)
else
???print("Line?3?-?條件為?false"?)
end
~~~
~~~
以上程序執行結果為:
~~~
~~~
Line?1?-?條件為?true
Line?2?-?條件為?true
Line?3?-?條件為?true
Line?3?-?條件為?false
~~~
~~~
### 其他運算符
下表列出了 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("w3cschool菜鳥教程網址長度?",#"www.w3cschool.cc"?)
~~~
~~~
以上程序執行結果為:
~~~
~~~
連接字符串?a?和?b?????Hello?World
b?字符串長度?????5
字符串?Test?長度?????4
w3cschool菜鳥教程網址長度???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
~~~
~~~
- Lua 簡介
- Lua 環境安裝
- Lua 數據類型
- Lua 變量
- Lua 循環
- Lua while 循環
- Lua for 循環
- Lua repeat...until 循環
- Lua 循環嵌套
- Lua break 語句
- Lua 流程控制
- Lua if 語句
- Lua if...else 語句
- Lua if 嵌套語句
- Lua 函數
- Lua 運算符
- Lua 字符串
- Lua 數組
- Lua 迭代器
- Lua table(表)
- Lua 模塊與包
- Lua 元表(Metatable)
- Lua 協同程序(coroutine)
- Lua 文件 I/O
- Lua 錯誤處理
- Lua 調試(Debug)
- Lua 垃圾回收
- Lua 面向對象
- Lua 數據庫訪問
- CoverPage