欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Lua学习记录 — (2) 运算符

程序员文章站 2024-03-17 23:10:10
...

Operator.lua

------------------------------------ 算术运算符 ------------------------------------

-- 加减乘除(+ - * /)
a = 21
b = 5
c = a+b; print(c)                                   --> 26
c = a-b; print(c)                                   --> 16
c = a*b; print(c)                                   --> 105
c = a/b; print(c)                                   --> 4.2

-- # 取模 幂 整除(% ^ //)
c = a%b; print(c)                                   --> 1(5*4=20 21-20=1 余1)
c = a^b; print(c)                                   --> 4084101.0(a的b次方)
c = a//b;print(c)                                   --> 4(21/5=4 余 1)

------------------------------------ 关系运算符 ------------------------------------

a,b,c = 1,2,1

print (a==b)                                        --> false
print (a>b)                                     --> false
print (a<b)                                     --> true
print (a>=c)                                        --> true
print (a<=c)                                        --> true
print (a~=b)                                       --> true

------------------------------------ 逻辑运算符 ------------------------------------

-- Lua中,只有false 和 nil 为假,其他都为真(包括数字0);
a,b,c = 1,2,nil
f = false

-- 与 and (有一个为false则返回false或nil,都为true则返回第二个值)
print (a and b)                                     --> 2
print (a and c)                                     --> nil
print (c and a)                                     --> nil
print (a and f)                                     --> false(一个真一个假,则返回假的值)
print (f and a)                                     --> false
print (c and f)                                     --> nil(两个都是假,则返回第一个值)
print (f and c)                                     --> false

-- 或 or (如果第一个为真,则返回第一个值,否则返回第二个值)
print (a or b)                                      --> 1
print (c or b)                                      --> 2

-- 非 not()
print (not b)                                       --> false
print (not c)                                       --> true

------------------------------------ 其他运算符 ------------------------------------

-- Lua目前没有自增自减运算符,以及其他算数运算的缩写形式,如 a += 1 报错!!

-- Lua5.1没有位运算符;
-- 在Lua5.3中,是支持位运算的:(与&、或|、异或~、非~、左移<<、右移>>)
a = 44  -- 0010 1100
b = 21  -- 0001 0101
print (a & b)                                       --> 4(0000 0100)
print (a | b)                                       --> 61(0011 1101)
print (a ~ b)                                      --> 57(0011 1001)
print (~a)                                         --> -45(1101 0011)
a = 2   -- 0000 0010
print (a<<2)                                            --> 8(0000 1000)
print (a>>1)                                            --> 1(0000 0001)

-- 字符串连接运算符 ..
str1,str2 = "你好","china"
str3 = str1 .. str2 .. "!!!"
print(str3)                                             --> 你好china!!!

-- 字符串取长度运算符 #(也可获取表table的长度,但仅仅只是最大的索引值)
print(#str1)                                            --> 4(1个中文占2个字符长度)
print(#"china")                                     --> 5
print(#(str1 .. "china"))                           --> 9

tbl = {key1 = "123",1,2}
print(#tbl)                                         --> 2(最大索引下标为2)
tbl[4] = "1"
print(#tbl)                                         --> 4(最大索引下标为4,3是空缺的)

tbl2 = {1,2} tbl2[5]=5
print(#tbl2)                                            --> 2(最大索引下标为5,3和4是空缺的,缺了超过1位以上,则长度还是2)

--[=[       《补充》

1. table表成员函数访问符(点. 和 冒号:)
tbl = {name = "BeiJiaan",1,2,3}

function tbl:f1()       -- 函数定义时,使用: ,则默认传入self(即调用者自身)
    print(self.name)
end

function tbl.f2(self)   -- 函数定义时,使用. ,则需要手动传入self
    print(self.name)
end

tbl:f1()                -- 函数调用时,使用:,表示传入self
tbl.f1(tbl)             -- 函数调用时,使用. ,表示不自动传入self
tbl:f2()
tbl.f2(tbl)

]=]

------------------------------------ 运算符优先级 ------------------------------------

-- 从高到低顺序:

-- ^
-- not -(负数)
-- * /
-- + - (减)
-- < > <= >= ~= ==
-- and
-- or