【系列】潜水党的简单lua教程三
上一篇文章聊到过table和函数的基本写法。
这次便快速的讲一遍lua里的一些运算符,了解运算符很重要,因为之后地图内需要实现效果时,会依靠大量的运算符来实现算法公式。
加法公式:
num = 1+1
-- 其中 + 就是加法运算符,num的结果等于2
减法公式:
num = 1 - 1
-- 其中 - 就是减法运算符,num的结果等于0
乘法公式:
num = 1 * 1
-- 其中 * 就是乘法运算符,num结果等于1
除法公式:
num = 1 / 1
-- 其中 / 就是除法运算符,num结果等于1
除了以上四种基本的加减乘除运算符以外,lua中还存在四种运算符。
取余:
num = 1 % 1 -- num结果等于0
既然1 % 1 = 0 ,那么取余到底是什么意思呢?
取余就是模运算,也是blizzard.j里面的< ModuloReal > or < ModuloInteger >函数。
bj里面的< ModuloInteger >函数写法是,被除数为a,除数为b
x = a - (a / b) * b
如果 x < 0 那么x = x + b
返回 x(取余)
但是在< ModuloReal >函数里多了一个步骤。
它修改了 x = a - (a / b) * b
将其修改为 x = a - I2R(R2I(a / b)) * b
< R2I >函数是什么意思呢?转实数为整数,并且舍弃小数点后的数,不会进行四舍五入。
< I2R >函数是什么意思呢?转整数为实数。
这里并不是多此一举,之前说了,如果被除数无法被整除,那么整除后剩下的数便是取余数。
只有转实数为整数,才能确保获取的值绝对为整数,因此获得的取余数才是准确的。
可能有的朋友看不懂上面到底是什么意思,这里再做一个最简单不过的例子:
num = 13 % 5 -- num结果等于3
这个时候你会发现,num不再是零,但它为什么等于3呢?
这里写两个简单的公式:
13 / 5 = 2.6 -- 结果:13无法被5整除
10 / 5 = 2 -- 结果:10可以被5整除
那么10和13有什么区别呢?区别就在于多出来的3无法被5整除。
所以了,无法被整除的数,就是取余的值。
实数取余也是如此,取余的规则并不会因为你用的数不同而产生变化。
乘幂:
num = 1 ^ 1 -- 结果num等于1
乘幂里面 1 ^ 1 结果依然是1,那么乘幂的意思是什么呢?
如果把乘幂叫做乘方、次方,是不是就熟悉多了呢?
以下是关于次方的一些规则:
1的次方等于1
1的任何次方依然是等于1
1的零次方等于1
任何数的零次方都等于1
乘幂的定义:设a为任意数,n为正整数,a的n次方表示为aⁿ,表示n个a连乘所得之结果。
例:
x = 2 ^ 10
x = 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2
x = 4 * 4 * 4 * 4 * 4
x = 1024
负号:
num = -1 -- 结果num等于-1
任何数加上负号,都会是返回负数。
整除:
num = 13 // 5 -- 结果num等于2
整除的概念已经在取余中提到,这里就不多做赘述。
不过这里的整除运算符需要提到的一点是,// 在大多数的程序语言里面,都是作为注释符号出现的,而lua里面的注释符号是--
关系运算符:
== :等于,检测两个值是否相等,相等返回 true,否则返回 false
例:1 == 2 返回否(false)
~= :不等于,检测两个值是否相等,不相等返回 true,否则返回 false
例:1 ~= 2 返回真(true)
这里需要说明的是,在其他程序语言里,不等于大多数为!=
而lua里面不等于是~=
> :大于,如果左边的值大于右边的值,返回 true,否则返回 false
例:1 > 2 返回否(false)
< :小于,如果左边的值大于右边的值,返回 true,否则返回 false
例:1 < 2 返回真(true)
>= :大于,如果左边的值大于右边的值,返回 true,否则返回 false
例:1 >= 2 返回否(false)
<= :小于,如果左边的值大于右边的值,返回 true,否则返回 false
例:1 <= 2 返回真(true)
逻辑运算符:
and :左右条件均成立时,返回真(true),否则返回否(false)
or :左右任意一个条件成立时,返回真(true),否则返回否(false)
not :相反条件成立时,返回真(true),否则返回否(false)
例:not(true)== false, not(false) == true
其他运算符:
.. :连接两个字符串
例:‘王大锤’..‘家里着火’, 输出结果为王大锤家里着火
# :返回字符串或table的长度
例:#‘abc’,输出结果为3