UH2S1L4——运算符

算数运算符

在lua中有:+ - * / % ^​这些算数运算符,用于数学运算

注意,lua没有自增自减++ --,也没有复合运算符+= -= ...^符号在Lua中是幂运算符号,而非异或运算符!!!
同时,与C#不同,如果字符串是数字形式的,如
"123",则在可以与number类型的数字进行算数运算符运算,字符串会自动转为number类型
两个数字形式的字符串使用算数运算符运算也是会和计算数字那样计算,这也是为什么字符串拼接会采用
..这种符号的原因

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
print("**********算数运算符************")
-- + - * / % ^
-- 没有自增自减
-- 没有复合运算符

a = 1
b = 2
print("加法运算:" .. a + b)
print("字符串与数字加法运算:" .. "123.4" + 1) --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number
print("字符串与字符串加法运算:" .. "123.4" + "1") --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number

print("减法运算:" .. 1 - 2)
print("字符串与数字减法运算:" .. "123.4" - 1) --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number

print("乘法运算:" .. 2 * 2)
print("字符串与数字乘法运算:" .. "123.4" * 2) --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number

print("除法运算:" .. 1 / 2)
print("字符串与数字除法运算:" .. "123.4" / 2) --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number

print("取余运算:" .. 1 % 2)
print("字符串与数字取余运算:" .. "123.4" % 2) --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number

-- ^符号在Lua中是幂运算符号,而非异或运算符!!!
print("幂运算:" .. 2 ^ 5)
print("字符串与数字幂运算:" .. "123.4" ^ 2) --如果字符串是数字形式的,则可以与number进行算数预算符操作,会自动转换为number
1
2
3
4
5
6
7
8
9
10
11
12
13
14
**********算数运算符************
加法运算:3
字符串与数字加法运算:124.4
字符串与字符串加法运算:124.4
减法运算:-1
字符串与数字减法运算:122.4
乘法运算:4
字符串与数字乘法运算:246.8
除法运算:0.5
字符串与数字除法运算:61.7
取余运算:1
字符串与数字取余运算:1.4
幂运算:32
字符串与数字幂运算:15227.56

条件运算符

在lua中有:> < >= <= == ~=​这些条件运算符,用于判断真假,返回boolean​类型变量

注意!是 ~= 不是 !=

1
2
3
4
5
6
7
print("**********条件运算符************")
print(3 > 1)
print(3 < 1)
print(3 >= 1)
print(3 <= 1)
print(3 == 1)
print(3 ~= 1)
1
2
3
4
5
6
7
**********条件运算符************
true
false
true
false
false
true

逻辑运算符

在lua中有:and or not​这些逻辑运算符,用于对两个boolean​类型变量进行逻辑,返回boolean​类型变量

注意!是****​and而不是 &&,是****​and而不是 ||,是****​not而不是 !

这里的逻辑运算符同样有短路的特性,即前面的表达式符合条件了,会直接无视后面的表达式,
例如多个and​连接起来的表达式,前面的表达式为false​了,后面的表达式是不会执行或者计算的

1
2
3
4
5
6
print("**********逻辑运算符************")
print(true and false)
print(true and true)
print(true or false)
print(false or false)
print(not true)
1
2
3
4
5
6
**********逻辑运算符************
false
true
true
false
false

位运算符

Lua5.3以前的版本的Lua不支持位运算符!需要自己实现(如果你下载安装的是LuaforWindows,那它是Lua5.1的)

1
2
3
4
5
6
7
8
9
10
--Lua 5.3.3  Copyright (C) 1994-2016 Lua.org, PUC-Rio

a = 12
b = 9
print(a & b) --位与
print(a | b) --位或
print(a ~ b) --异或
print(~a) --按位取反
print(a >> 2) --右移
print(b << 3) --左移
1
2
3
4
5
6
8
13
5
-13
3
72

三目运算符

Lua不支持原生三目运算符,但是我们可以用and or​替代,具体内容在 特殊用法 部分查看