1. 程式人生 > 其它 >lua基本語法之基本運算子

lua基本語法之基本運算子

一)算術運算子

+	加法	
-	減法	
*	乘法	
/	除法	
%	取餘	
^	乘冪	
-	負號

print(1 + 2)       -->列印 3
print(5 / 10)      -->列印 0.5。 這是Lua不同於c語言的
print(5.0 / 10)    -->列印 0.5。 浮點數相除的結果是浮點數
-- print(10 / 0)   -->注意除數不能為0,計算的結果會出錯
print(2 ^ 10)      -->列印 1024。 求2的10次方

local num = 1357
print(num % 2)       -->列印 1
print((num % 2) == 1) -->列印 true。 判斷num是否為奇數
print((num % 5) == 0)  -->列印 false。判斷num是否能被5整數

二)關係運算符

==	等於,檢測兩個值是否相等,相等返回 true,否則返回 false	
~=	不等於,檢測兩個值是否相等,相等返回 false,否則返回 true	不想java !=,,~=
>	大於,如果左邊的值大於右邊的值,返回 true,否則返回 false	
<	小於,如果左邊的值大於右邊的值,返回 false,否則返回 true	
>=	大於等於,如果左邊的值大於等於右邊的值,返回 true,否則返回 false	
<=	小於等於, 如果左邊的值小於等於右邊的值,返回 true,否則返回 false

print(1 < 2)    -->列印 true
print(1 == 2)   -->列印 false
print(1 ~= 2)   -->列印 true
local a, b = true, false
print(a == b)  -->列印 false

注意:table, userdate 和函式;判斷的是引用地址的判斷
local a = { x = 1, y = 0}
local b = { x = 1, y = 0}
if a == b then
  print("a==b")
else
  print("a~=b")
end

三)邏輯運算子

and	邏輯與操作符。(A and B) 若 A 為 假,則返回 A,否則返回 B
or	邏輯或操作符。(A or B) 若 A 為 真,則返回 A,否則返回 B
not	邏輯非操作符。與邏輯運算結果相反,如果條件為 true,邏輯非為 false。 永遠只返回 true 或者 false

local c = nil
local d = 0
local e = 100

print(c and d)  -->列印 nil
print(c and e)  -->列印 nil
print(d and e)  -->列印 100

print(c or d)   -->列印 0
print(c or e)   -->列印 100
print(d or e)   -->列印 0

print(not c)    -->列印 true
print(not d)    -->列印 false

短路取值 原理
and  與,,,if(a and b and c)

a and b and c   a為真,b為真,c為真  返回c
                a為真,b為假,c為真  返回b
                a為假 bc不管bc為什麼值  返回a

                一路去判斷變數值是否為真,一旦遇到某個變數為假,就立刻短路返回 返回值就是 假的變數值

a or b or c     一路判斷變數值是否為真,一但遇到某個變數為真,就立刻短路返回,返回值就是 真的變數值
				a為真,bc    返回a

				a為假,b為真,不管c是什麼值 返回b

四)其他運算子

連線兩個字串	a..b ,其中 a 為 "Hello " , b 為 "World", 輸出結果為 "Hello World"。一元運算子,返回字串或表的長度。 #"Hello" 返回 5


很多字串連線 我們如果採用..這個運算子 ,效能是很低


推薦使用 table 和 table.concat() 來進行很多字串的拼接

五)優先順序

^
not   # -
*   /   %
+   -
..
< > <=  >=  ==  ~=
and
or
------------------------
local a, b = 1, 2
local x, y = 3, 4
local i = 10
local res = 0
res = a + i < b/2 + 1  -->等價於res =  (a + i) < ((b/2) + 1)
res = 5 + x^2*8        -->等價於res =  5 + ((x^2) * 8)
res = a < y and y <=x  -->等價於res =  (a < y) and (y <= x)