On this page

Lua 运算符

Lua 运算符详解

Lua 提供了丰富的运算符用于各种运算操作,以下是 Lua 中所有运算符的详细介绍:

1. 算术运算符

运算符描述示例结果
+加法10 + 515
-减法10 - 55
| 乘法 | `10 5`50
/除法10 / 52.0
%取模10 % 31
^指数2 ^ 38
-负号-5-5
print(7 / 2)   -- 输出: 3.5
print(7 // 2)  -- 输出: 3 (整除,Lua 5.3+)
print(2 ^ 10)  -- 输出: 1024
print(-(5 + 3)) -- 输出: -8

2. 关系运算符

运算符描述示例结果
==等于5 == 5true
~=不等于5 ~= 3true
<小于5 < 3false
>大于5 > 3true
<=小于等于5 <= 5true
>=大于等于5 >= 6false
print("hello" == "hello")  -- 输出: true
print(1 == 1.0)           -- 输出: true (值相等)
print(1 ~= 2)             -- 输出: true

3. 逻辑运算符

运算符描述示例结果
and逻辑与true and falsefalse
or逻辑或true or falsetrue
not逻辑非not truefalse

Lua 的逻辑运算符采用短路求值,并返回操作数本身而非布尔值:

print(4 and 5)    -- 输出: 5
print(nil and 5)  -- 输出: nil
print(0 or 5)     -- 输出: 0 (0在Lua中为真)
print(false or 5) -- 输出: 5

4. 连接运算符

运算符描述示例结果
..字符串连接"Hello".."Lua""HelloLua"
local name = "Lua"
local version = 5.4
print("Using " .. name .. " " .. version)  -- 输出: Using Lua 5.4

5. 长度运算符

运算符描述示例结果
#获取字符串或表长度#"hello"5
#{1,2,3}3
print(#{10, 20, 30})      -- 输出: 3
print(#"Lua programming") -- 输出: 13

6. 位运算符 (Lua 5.3+)

运算符描述示例结果
&按位与5 & 31
按位或5 | 37
~按位异或5 ~ 36
>>右移8 >> 14
<<左移1 << 38
~按位非~0-1
print(0xF0 & 0x0F)  -- 输出: 0 (二进制 11110000 & 00001111)
print(1 << 4)       -- 输出: 16

7. 运算符优先级

Lua 运算符优先级从高到低如下:

  1. ^
  2. not # - (负号)
  3. * / // %
  4. + - (减号)
  5. .. (连接)
  6. << >> (位运算)
  7. & (位与)
  8. ~ (位异或)
  9. | (位或)
  10. < > <= >= ~= ==
  11. and
  12. or
local result = 5 + 2 * 3 ^ 2  -- 等价于 5 + (2 * (3 ^ 2)) = 23
print(result)                -- 输出: 23

8. 特殊运算符行为

  1. 字符串与数字比较:会尝试将字符串转为数字

    print("10" == 10)   -- false (不同类型)
    print("10" < 2)     -- false (按数字比较)
    
  2. 表比较:只有相同表才相等

    local t1 = {}
    local t2 = {}
    print(t1 == t2)  -- false
    print(t1 == t1)  -- true
    
  3. nil 比较:nil 只等于 nil

    print(nil == nil)  -- true
    print(nil == 0)    -- false
    

理解这些运算符及其优先级对于编写正确的 Lua 表达式至关重要。在实际编程中,适当使用括号可以使表达式更清晰易读。