【系列】潛水黨的簡單lua教程三
上一篇文章聊到過table和函數(shù)的基本寫法。
這次便快速的講一遍lua里的一些運算符,了解運算符很重要,因為之后地圖內(nèi)需要實現(xiàn)效果時,會依靠大量的運算符來實現(xiàn)算法公式。
加法公式:
num?= 1+1
?-- 其中 + 就是加法運算符,num的結(jié)果等于2
減法公式:
num = 1 - 1
-- 其中 - 就是減法運算符,num的結(jié)果等于0
乘法公式:
num = 1 * 1
-- 其中 * 就是乘法運算符,num結(jié)果等于1
除法公式:
num = 1 / 1
-- 其中 / 就是除法運算符,num結(jié)果等于1
除了以上四種基本的加減乘除運算符以外,lua中還存在四種運算符。
取余:
num = 1 % 1?--?num結(jié)果等于0
既然1 % 1 = 0 ,那么取余到底是什么意思呢?
取余就是模運算,也是blizzard.j里面的< ModuloReal > or <?ModuloInteger >函數(shù)。
bj里面的<?ModuloInteger?>函數(shù)寫法是,被除數(shù)為a,除數(shù)為b
x =?a - (a / b) * b
如果?x < 0 那么x = x + b
返回 x(取余)
但是在< ModuloReal >函數(shù)里多了一個步驟。
它修改了 x =?a - (a / b) * b?
將其修改為?x =?a -?I2R(R2I(a / b)) * b
< R2I >函數(shù)是什么意思呢?轉(zhuǎn)實數(shù)為整數(shù),并且舍棄小數(shù)點后的數(shù),不會進行四舍五入。
< I2R?>函數(shù)是什么意思呢?轉(zhuǎn)整數(shù)為實數(shù)。
這里并不是多此一舉,之前說了,如果被除數(shù)無法被整除,那么整除后剩下的數(shù)便是取余數(shù)。
只有轉(zhuǎn)實數(shù)為整數(shù),才能確保獲取的值絕對為整數(shù),因此獲得的取余數(shù)才是準確的。
可能有的朋友看不懂上面到底是什么意思,這里再做一個最簡單不過的例子:
num = 13 % 5 -- num結(jié)果等于3
這個時候你會發(fā)現(xiàn),num不再是零,但它為什么等于3呢?
這里寫兩個簡單的公式:
13 / 5 = 2.6 -- 結(jié)果:13無法被5整除
10 / 5 = 2 -- 結(jié)果:10可以被5整除
那么10和13有什么區(qū)別呢?區(qū)別就在于多出來的3無法被5整除。
所以了,無法被整除的數(shù),就是取余的值。
實數(shù)取余也是如此,取余的規(guī)則并不會因為你用的數(shù)不同而產(chǎn)生變化。
乘冪:
num = 1 ^ 1 -- 結(jié)果num等于1
乘冪里面 1 ^ 1 結(jié)果依然是1,那么乘冪的意思是什么呢?
如果把乘冪叫做乘方、次方,是不是就熟悉多了呢?
以下是關(guān)于次方的一些規(guī)則:
1的次方等于1
1的任何次方依然是等于1
1的零次方等于1
任何數(shù)的零次方都等于1
乘冪的定義:設(shè)a為任意數(shù),n為正整數(shù),a的n次方表示為a?,表示n個a連乘所得之結(jié)果。
例:
x = 2?^ 10?
x = 2?* 2?* 2 *?2?* 2?* 2?* 2 *?2 *?2 *?2
x = 4?* 4?*?4?* 4 * 4
x = 1024
負號:
num = -1 -- 結(jié)果num等于-1
任何數(shù)加上負號,都會是返回負數(shù)。
整除:
num = 13 // 5 -- 結(jié)果num等于2
整除的概念已經(jīng)在取余中提到,這里就不多做贅述。
不過這里的整除運算符需要提到的一點是,// 在大多數(shù)的程序語言里面,都是作為注釋符號出現(xiàn)的,而lua里面的注釋符號是--
關(guān)系運算符:
== :等于,檢測兩個值是否相等,相等返回 true,否則返回 false
例:1 == 2?返回否(false)
~= :不等于,檢測兩個值是否相等,不相等返回 true,否則返回 false
例:1?~= 2 返回真(true)
這里需要說明的是,在其他程序語言里,不等于大多數(shù)為!=
而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
其他運算符:
.. :連接兩個字符串
例:‘王大錘’..‘家里著火’, 輸出結(jié)果為王大錘家里著火
# :返回字符串或table的長度
例:#‘a(chǎn)bc’,輸出結(jié)果為3