Lua 运算符
运算符是一个特殊的符号,用于告诉解释器执行特定的数学或逻辑运算。
Lua提供了以下几种运算符类型:
- 算术运算符
- 关系运算符
- 逻辑运算符
- 其他运算符
算术运算符
下表列出了 Lua 语言中的常用算术运算符
我们假定 A 的值为10,B 的值为 20
操作符 | 描述 | 范例 |
---|---|---|
+ | 加法 | A + B 输出结果 30 |
- | 减法 | A - B 输出结果 -10 |
* | 乘法 | A * B 输出结果 200 |
/ | 除法 | B / A 输出结果 2 |
% | 取余 | B % A 输出结果 0 |
^ | 乘幂 | A^2 输出结果 100 |
- | 负号 | -A 输出结果 -10 |
范例
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. a = 21 b = 10 print(string.format("%d + %d = %d", a, b,a+b )) print(string.format("%d - %d = %d", a, b,a-b )) print(string.format("%d * %d = %d", a, b,a*b )) print(string.format("%d / %d = %f", a, b, a / b )) print(string.format("%d %% %d = %d", a, b,a % b )) print(string.format("%d^%d = %d", a, b,a^b )) print(string.format("- %d = %d", a,-a ))
以上程序执行结果为:
$ lua main.lua 21 + 10 = 31 21 - 10 = 11 21 * 10 = 210 21 / 10 = 2.100000 21 % 10 = 1 21^10 = 16679880978201 - 21 = -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 |
范例
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. a = 21 b = 10 print(string.format("a=%d",a)) print(string.format("b=%d",b)) if( a == b ) then print("a 等于 b" ) else print("a 不等于 b" ) end if( a ~= b ) then print("a 不等于 b" ) else print("a 等于 b" ) end if ( a < b ) then print("a 小于 b" ) else print("a 大于等于 b" ) end if ( a > b ) then print("a 大于 b" ) else print("a 小于等于 b" ) end -- 修改 a 和 b 的值 a = 5 b = 20 if ( a <= b ) then print("a 小于等于 b" ) end if ( b >= a ) then print("b 大于等于 a" ) end
运行以上 Lua 脚本,输出结果如下:
a=21 b=10 a 不等于 b a 不等于 b a 大于等于 b a 大于 b a 小于等于 b b 大于等于 a
逻辑运算符
下表列出了 Lua 语言中的常用逻辑运算符
我们假设 A 的值为 true,B 的值为 false
操作符 | 描述 | 范例 |
---|---|---|
and | 逻辑与操作符。 若 A 为 false,则返回 A,否则返回 B | (A and B) 为 false |
or | 逻辑或操作符。 若 A 为 true,则返回 A,否则返回 B | (A or B) 为 true |
not | 逻辑非操作符。与逻辑运算结果相反,如果条件为 true,逻辑非为 false | not(A and B) 为 true |
范例
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. array = {"QQ", "Baidu",'Ali','Sina','Meituan'} 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
运行以上 Lua 脚本,输出结果如下
$ lua main.lua a and b - 条件为 true a or b - 条件为 true ---------分割线--------- a and b - 条件为 false not( a and b) - 条件为 true
其他运算符
下表列出了 Lua 语言中的连接运算符与计算表或字符串长度的运算符
我们假设 a = "Hello ",b="www.twle.cn"
操作符 | 描述 | 范例 |
---|---|---|
.. | 连接两个字符串 | a..b 输出结果为 "Hello www.twle.cn" |
# | 一元运算符,返回字符串或表的长度 | #a 返回 6 |
范例 : 连接运算符与计算表或字符串长度的运算符的使用
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. a = "Hello " b = "www.twle.cn" print("连接字符串 a 和 b ", a..b ) print("b 字符串长度 ",#b ) print("字符串 Test 长度 ",#"Test" ) print("www.twle.cn 长度 ",#b )
运行以上 Lua 脚本,输出结果如下:
$ lua main.lua 连接字符串 a 和 b Hello www.twle.cn b 字符串长度 11 字符串 Test 长度 4 www.twle.cn 长度 11
运算符优先级
从高到低的顺序为
优先级 | 符号 | 连接方式 |
---|---|---|
1 | ^ | 右连接 |
2 | not 、 - (unary) | 左连接 |
3 | * 、 / | 左连接 |
4 | + 、 - | 左连接 |
5 | .. | 右连接 |
6 | < 、 > 、 <= 、 >= 、 ~= 、 == | 左连接 |
7 | and | 左连接 |
8 | 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 语言运算符的优先级
-- !/usr/bin/lua -- -*- encoding:utf-8 -*- -- filename: main.lua -- author: 简单教程(www.twle.cn) -- Copyright © 2015-2065 www.twle.cn. All rights reserved. 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 )
运行以上 Lua 脚本,输出结果如下
$ lua main.lua (a + b) * c / d 运算值为 : 90.0 ((a + b) * c) / d 运算值为 : 90.0 (a + b) * (c / d) 运算值为 : 90.0 a + (b * c) / d 运算值为 : 50.0