6.运算符
6.1 知识点
算术运算符
- Lua 的算术运算符主要有
+加、-减、*乘、/除、%取余、^幂。 - Lua 没有自增自减
++、--。 - Lua 没有复合运算符
+=、-=,/=,*=,%= - 能转成数字的字符串可参与算术运算;不建议依赖隐式转换,需要数字时用
tonumber转一下更清晰。 - 字符串拼接用
..;拼接里夹算术运算时,算术部分用括号包起来。
print("加法运算" .. (1 + 2)) -- 加法运算3
a = 1
b = 2
print("加法运算" .. (a + b)) -- 加法运算3
a = a + b
-- Lua 没有自增自减 a++,一定要手动 a = a + 1
a = a + 1
print("加法运算" .. (a + b)) -- 加法运算6
print("加法运算" .. ("123.4" + 1)) -- 加法运算124.4
print("减法运算" .. (1 - 2)) -- 减法运算-1
print("减法运算" .. ("123.4" - 1)) -- 减法运算122.4
print("乘法运算" .. (1 * 2)) -- 乘法运算2
print("乘法运算" .. ("123.4" * 2)) -- 乘法运算246.8
print("除法运算" .. (1 / 2)) -- 除法运算0.5
print("除法运算" .. ("123.4" / 2)) -- 除法运算61.7
print("取余运算" .. (1 % 2)) -- 取余运算1
print("取余运算" .. ("123.4" % 2)) -- 取余运算1.4
print("幂运算" .. (2 ^ 5)) -- 幂运算32
print("幂运算" .. ("123.4" ^ 2)) -- 幂运算15227.56
条件运算符
- 条件(关系)运算符:
>、<、>=、<=、==、~=。
print(3 > 1) -- true
print(3 < 1) -- false
print(3 >= 1) -- true
print(3 <= 1) -- false
print(3 == 1) -- false
print(3 ~= 1) -- true
逻辑运算符
- 逻辑运算符:
and、or、not。 - 遵循短路:前面已能决定结果时,后面不再执行。
and/or返回原始值,写条件时注意。
print(true and false) -- false
print(true and true) -- true
print(false and true) -- false
print(true or false) -- true
print(false or false) -- false
print(not true) -- false
-- 注意:Lua 可以和 nil 进行逻辑运算
位运算符
- Lua 5.1 没有原生位运算符,需自己实现或用库。
- Lua 5.3+ 支持
&、|、~、<<、>>。 - Unity Lua 热更常见 5.1 / LuaJIT,不能默认支持 5.3+ 写法。
三目运算符
- Lua 不支持
条件 ? A : B。 - 可用
and/or模拟,但有坑,用前要想清楚边界值。
6.2 知识点代码
Lesson6_运算符.lua
print("**********运算符************")
print("**********知识点一 算术运算符************")
-- + - * / % ^;无 ++/--、+=/-= 等复合运算符
-- 数字字符串可参与运算,项目里建议 tonumber
-- 拼接用 ..;夹算术时用括号
print("加法运算" .. (1 + 2)) -- 加法运算3
a = 1
b = 2
print("加法运算" .. (a + b)) -- 加法运算3
a = a + b
-- Lua 没有自增自减 a++,一定要手动 a = a + 1
a = a + 1
print("加法运算" .. (a + b)) -- 加法运算6
print("加法运算" .. ("123.4" + 1)) -- 加法运算124.4
print("减法运算" .. (1 - 2)) -- 减法运算-1
print("减法运算" .. ("123.4" - 1)) -- 减法运算122.4
print("乘法运算" .. (1 * 2)) -- 乘法运算2
print("乘法运算" .. ("123.4" * 2)) -- 乘法运算246.8
print("除法运算" .. (1 / 2)) -- 除法运算0.5
print("除法运算" .. ("123.4" / 2)) -- 除法运算61.7
print("取余运算" .. (1 % 2)) -- 取余运算1
print("取余运算" .. ("123.4" % 2)) -- 取余运算1.4
print("幂运算" .. (2 ^ 5)) -- 幂运算32
print("幂运算" .. ("123.4" ^ 2)) -- 幂运算15227.56
print("**********知识点二 条件运算符************")
-- 关系运算符:> < >= <= == ~=
print(3 > 1) -- true
print(3 < 1) -- false
print(3 >= 1) -- true
print(3 <= 1) -- false
print(3 == 1) -- false
print(3 ~= 1) -- true
print("**********知识点三 逻辑运算符************")
-- and / or / not;短路;and/or 返回原始值
print(true and false) -- false
print(true and true) -- true
print(false and true) -- false
print(true or false) -- true
print(false or false) -- false
print(not true) -- false
-- 短路:前面已能决定结果,后面不执行
print(false and print("123")) -- false,没有打印 123,因为前面的 false 已经能决定结果
print(true and print("123")) -- 会先打印 123,外层 print 打印的是后面表达式的返回结果
-- Lua 可以和 nil 进行逻辑运算
print("**********知识点四 位运算符************")
-- 5.1 无原生位运算;5.3+ 有 & | ~ << >>
-- Unity 热更常见 5.1/LuaJIT,不能默认 5.3+ 写法
print("**********知识点五 三目运算符************")
-- 无 ? : 语法;and/or 可模拟,注意边界值坑
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com