Basics
Let's first take a look at the basics, addition, subtraction, multiplication, and division. These work as one would expect:
local x = 2
local y = 3
print(x + y) -- 5
print(x - y) -- -1
print(x * y) -- 6
print(x / y) -- 0.66666666666667
Negation
Whereas almost all languages allow a value to be negated by multiplying it by -1 to negative it,
Lua additionally allows a value to be negated by simply prefixing it with -.
local x = 2
local y = 3
print(-x) -- -2
print(-y) -- -3
print(x + -y) -- -1
Note that negation occurs independently of other operators, as shown in the last case. We will learn more about this in a moment when we discuss precedence.
Exponentiation
Lua supports exponentiation with the ^ operator:
local x = 2
local y = 3
print(x ^ y) -- 8
print(y ^ -x) -- 0.11111111111111
Modulus
Like many programming languages
modular arithmetic in Lua uses the
% operator. While the topic of modular arithmetic is well outside the scope of learning about
Lua, this is a useful but often misunderstood function, so let's give it a quick review.
To calculate a % b, one first finds the largest integer k such that multiplying k by b is less
than a, then the result is the difference or remainder, a - kb.
local x = 2
local y = 3
print(x % y) -- 2
print(y % x) -- 1
In the first example y is greater than x, so the remainder is simply x. In the second example
the largest integer k is 1, so that the remainder is 3-2=1.
Bitwise
Lua also supports the basic bitwise operations. While bitwise operations are very important in computing, they are used in a fairly narrow range of applications so we won't spend too much time on them other than to show which operations are supported and a simple example of how they work:
local bit = require("bit")
local x = 2
local y = 3
print(bit.band(x,y)) -- 2
print(bit.bor(x, y)) -- 3
print(bit.bxor(x, y)) -- 1
To help understand these results, keep in mind
| Decimal | Binary |
|---|---|
| 0 | 0000 |
| 1 | 0001 |
| 2 | 0010 |
| 3 | 0011 |
| 4 | 0100 |
| 5 | 0101 |
You can learn more about bitwise operations here.