龙空技术网

Lua运算「DaemonCoder」

DaemonCoder 145

前言:

目前小伙伴们对“lua实现排序算法”大体比较珍视,各位老铁们都需要剖析一些“lua实现排序算法”的相关知识。那么小编在网上搜集了一些对于“lua实现排序算法””的相关知识,希望我们能喜欢,我们一起来学习一下吧!

算术运算

除了加、减、乘、除等常见的运算之外,Lua还支持取整除法、取模和指数运算。

print(-1 + 3) -- 3print(0.1 + 0.2 == 0.3) -- false 和C语言类似浮点运算不精确,相等判断会有问题print(1 - 2) -- -1print(2 * 3) -- 6print(5 / 2) -- 2.5print(5 // 2) -- 2 Lua5.3引入print(5 % 3) -- 2print(-5 % 3) -- 1print(2 ^ 3) -- 8

Lua中除法的结果都是浮点数(即使两个操作数都是整数,且能整除),如果想要得到向下取整的结果,可以用math.floor()函数。Lua5.3为这种向下取整的除法引入了一个新的运算符//,对除法得到的结果向负无穷取整。

print(math.type(4 / 2)) -- float print(math.floor(5 / 2)) -- 2print(math.type(math.floor(5 / 2))) -- integer -- 注意,Lua5.3之前所有的数值类型都浮点数,5.3才引入整数print(-9 // 2) -- -5

取模运算需要注意有负数的情况,和其他语言有可能得出的结果不同,Lua的计算方法如下:

a % b == a - ((a // b) * b)

结果的符号和第二个操作数一致。

print(5 % 3) -- 2print(-5 % 3) -- 1print(5 % -3) -- -1--[[注意!在C语言中:5 % 3 == 2-5 % 3 == -25 % -3 == 2]]
关系运算

Lua提供了以下的关系运算:

大于 >小于 <等于 ==不等于 ~=大于或等于 >=小于或等于 <=

这些关系运算的结果都是布尔型。注意:

不同类型的变量不相等,但是整数、浮点数这种细分的子类型不区分,都视为数字类型。Lua中的等于判断,是对变量对应内存地址的判断,两个表即使内容相同也是不相等的。

print(2 > 3) -- falseprint(2 < 3) -- trueprint(2 == 3) -- falseprint(2 ~= 3) -- trueprint(2 == 2.0) -- trueprint(nil == false) -- falseprint(nil == 0) -- falseprint(1 == true) -- falseprint(0 == false) -- false 没有类似C语言的类型转换print(1 == "1") -- false 不同的类型不相等print('1' == "1") -- trueprint('a' == 'a') -- trueprint({} == {}) -- false
逻辑运算

lua提供了三个逻辑符:and、or 、not

and 逻辑与操作符。 true and false 为 false。or 逻辑或操作符。 true or false 为 true。not 逻辑非操作符。not false 为 true。

和其他语言类似,判断有短路效果,即:

and操作第一个为false,就不再执行后面的判断or操作第一个为true,也不再执行后台的判断

local a, b = 1, 2;function change_value() b = 3 return trueendif (a == 2 and change_value()) then endprint(b) -- 输出2 a==2为false,不再执行change_value()if (a == 1 or change_value()) then endprint(b) -- 输出2 a==1为true,不再执行change_value()if (a == 2 or change_value()) then endprint(b) -- 输出3 a==2为false,需要继续执行change_value()判断if (not(a == 2)) then print('a ~= 2') -- 会执行到这里else print('a == 2')end-- 复杂的判断中使用not时最好不要省略括号,否则运算符的优先级会导致和想象中不一致的结果(后面会有各运算符的优先级顺序)if (not a == 2) then -- not的优先级比==高,会先计算 not a 得出false,再计算 false == 2,最终结果是false print('true')else print('false') -- 会执行到这里end
位运算

Lua5.3提供了以下位运算,5.3以下的版本不支持:

& 按位与| 按位或~ 按位异或,当用作一无运算符时是按位取反>> 逻辑右移,用0填充,Lua没有提供算术右移(即用符号位填充)<< 逻辑左移其他运算符.. 连接两个字符串# 一元运算符,返回字符串或表的长度。 #"Hello" 返回 5

print('www.' .. 'daemoncoder' .. '.com') -- ('wow ' .. 23333) -- wow 23333print('wow ' .. -666) -- wow -666print('wow ' .. 2.333) -- wow 2.333--print('wow ' .. nil) -- 报错--print('wow ' .. false) -- 报错--print('wow ' .. true) -- 报错print(#'') -- 19print(#'汉字') -- 6 多字节字符使用时需要注意,计算出的长度是字节长度。print(#{'www.', 'daemoncoder', '.com'}) -- 3
运算符的优先级

Lua中的运算符优先级从高到低排列如下:

^ -(这里是一元运算符取反,不是减号) # not ~(这里是一元运算符按位取反) * / // % + -(这里是二元运算符减号,不是取反) .. << >> & ~(这里是二元操作符按位异或) | < > <= >= ~= == and or

更多优质内容,请关注daemoncoder.com

标签: #lua实现排序算法