Arithmetische und relationale Operatoren
Verwenden Sie +, -, *, /, //, %, ^ und Vergleichsoperatoren effektiv
Arithmetische und relationale Operatoren ist eine kostenlose Lua Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Lua Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Überblick über arithmetische Operatoren
Lua stellt einen vollständigen Satz arithmetischer Operatoren bereit: + (Addition), - (Subtraktion), * (Multiplikation), / (Gleitkommadivision), // (Ganzzahldivision mit Abrundung), % (Modulo), ^ (Exponentiation) und unäres - (Negation). Es ist besonders in Lua 5.3+ wichtig zu verstehen, wann jeder Operator eine Ganzzahl oder eine Gleitkommazahl zurückgibt.
print(10 + 3) -- 13
print(10 - 3) -- 7
print(10 * 3) -- 30
print(10 / 3) -- 3.3333... (always float)
print(10 // 3) -- 3 (floor division)
print(10 % 3) -- 1 (modulo)
print(2 ^ 10) -- 1024.0 (always float)
print(-5) -- -5Division von Ganzzahlen und Gleitkommazahlen
Der Operator / gibt immer eine Gleitkommazahl zurück, selbst wenn zwei Ganzzahlen dividiert werden, deren Ergebnis ganzzahlig ist. Der Operator // für Ganzzahldivision mit Abrundung gibt nur dann eine Ganzzahl zurück, wenn beide Operanden Ganzzahlen sind; ist einer der Operanden eine Gleitkommazahl, ist auch das Ergebnis eine Gleitkommazahl, wird aber weiterhin abgerundet.
Der Exponentiationsoperator ^ wandelt immer in eine Gleitkommazahl um, daher ergibt 2^3 8.0 und nicht 8. Verwenden Sie bei Bedarf math.tointeger(), um wieder in eine Ganzzahl umzuwandeln.
print(6 / 2) -- 3.0 (float!)
print(6 // 2) -- 3 (integer)
print(6.0 // 2) -- 3.0 (float floor)
print(7 // 2) -- 3 (floor toward -inf)
print(-7 // 2) -- -4 (floor, not truncate!)
print(2 ^ 3) -- 8.0 (always float)Modulo-Operator
Der Operator % in Lua ist definiert als a % b == a - floor(a/b) * b. Das bedeutet, dass sich sein Vorzeichen nach dem Divisor und nicht nach dem Dividenden richtet. Das unterscheidet sich von C/Java, wo sich das Ergebnis nach dem Vorzeichen des Dividenden richtet.
Der Modulo-Operator eignet sich zum Umwickeln von Werten, zum zyklischen Durchlaufen von Arrays und zum Implementieren von Ringpuffern. Eine häufige Verwendung ist: i % n durchläuft zyklisch die Werte von 0 bis n-1.
print(10 % 3) -- 1 (positive)
print(-10 % 3) -- 2 (sign of divisor!)
print(10 % -3) -- -2 (sign of divisor)
-- Cycling 1..5 example
for i = 1, 8 do
local idx = (i - 1) % 5 + 1
io.write(idx .. " ") -- 1 2 3 4 5 1 2 3
endRelationale Operatoren
Die relationalen Operatoren von Lua geben boolesche Werte zurück: == (gleich), ~= (ungleich), <, >, <=, >=. Beachten Sie, dass Lua für Ungleichheit ~= verwendet, anders als die meisten Sprachen, die != verwenden.
Der Vergleich von Werten unterschiedlicher Typen mit == gibt immer false zurück — bei Gleichheitsprüfungen gibt es keine implizite Typumwandlung. 1 == "1" ist in Lua false.
print(3 == 3) -- true
print(3 ~= 4) -- true
print(3 < 4) -- true
print(3 >= 3) -- true
-- No cross-type equality coercion
print(1 == "1") -- false
print(0 == false) -- false
-- Strings compare lexicographically
print("abc" < "abd") -- trueLogische Operatoren: and, or, not
Die logischen Operatoren von Lua sind and, or und not. Anders als in vielen Sprachen geben and und or keine booleschen Werte zurück, sondern einen ihrer Operanden. Dadurch sind idiomatische Muster wie Standardwerte und bedingte Zuweisungen möglich.
a and bgibtazurück, wennaals falsch ausgewertet wird, andernfallsba or bgibtazurück, wennaals wahr ausgewertet wird, andernfallsb
-- and/or return operands, not booleans
print(1 and 2) -- 2
print(false and 2) -- false
print(1 or 2) -- 1
print(false or 2) -- 2
-- Default value idiom
local name = nil
local display = name or "Anonymous"
print(display) -- AnonymousDas Ternär-Idiom
Lua besitzt keinen ternären Operator (?:), aber Sie können ihn mit and/or nachbilden. Das Muster condition and value_if_true or value_if_false funktioniert, solange value_if_true weder nil noch false ist.
Dies ist ein sehr verbreitetes Lua-Idiom. Beachten Sie den Sonderfall: Wenn der wahre Zweig tatsächlich false ergibt, schlägt das Muster fehl – verwenden Sie stattdessen eine if-Anweisung.
local x = 10
-- Ternary idiom
local label = x > 5 and "big" or "small"
print(label) -- big
-- Works for non-false truthy values
local age = 20
local status = age >= 18 and "adult" or "minor"
print(status) -- adult
-- Edge case: true branch is false -> use if
local val = true and false or "fallback"
print(val) -- fallback (wrong!)Operatorpräzedenz
Die Operatorpräzedenz in Lua, von niedrig nach hoch: or, and, Vergleiche (< > <= >= == ~=), |, ~, &, Shifts, .., + -, * / // %, unäre Operatoren (not # - ~), ^. Die Operatoren ^ und .. sind rechtsassoziativ; alle anderen sind linksassoziativ.
-- Precedence examples
print(2 + 3 * 4) -- 14 (not 20)
print(2 ^ 3 ^ 2) -- 512 (right assoc: 2^(3^2) = 2^9)
print(not 1 == 1) -- false (not (1) == 1 => false == 1)
print(not (1 == 1)) -- false
-- Use parens to be explicit
print((2 + 3) * 4) -- 20Bitweise Operatoren (Lua 5.3+)
Lua 5.3 hat native bitweise Operatoren für Ganzzahlen eingeführt: & (AND), | (OR), ~ (XOR bei binärer Verwendung, NOT bei unärer Verwendung), << (Links-Shift), >> (Rechts-Shift). In Lua 5.1/5.2 sind diese ohne Bibliothek nicht verfügbar.
Bitweise Operatoren erfordern Ganzzahloperanden. Die Übergabe einer Gleitkommazahl verursacht einen Laufzeitfehler, es sei denn, die Gleitkommazahl hat einen exakt ganzzahligen Wert.
-- Bitwise operators (Lua 5.3+)
print(0xFF & 0x0F) -- 15 (AND)
print(0xF0 | 0x0F) -- 255 (OR)
print(0xFF ~ 0x0F) -- 240 (XOR)
print(~0) -- -1 (bitwise NOT)
print(1 << 4) -- 16 (left shift)
print(256 >> 4) -- 16 (right shift)Stringlänge und Konkatenation
Der Operator # gibt die Länge eines Strings in Bytes zurück, und der Operator .. verkettet zwei Strings. Wenn Sie .. auf Zahlen anwenden, konvertiert Lua diese automatisch in Strings. Beim Mischen von Typen mit + gelten jedoch die Regeln der Typumwandlung – ein String, der wie eine Zahl aussieht, kann in arithmetischen Ausdrücken verwendet werden.
local s = "hello"
print(#s) -- 5
print(s .. " world") -- hello world
print(1 .. 2) -- 12 (number to string)
-- Length of table = array part length
local t = {10, 20, 30}
print(#t) -- 3
-- Beware: # on tables with holes is undefined
local h = {1, nil, 3}
print(#h) -- 1 or 3 (undefined behavior!)Häufige Fehler bei Operatoren
In Lua treten mehrere häufige operatorbezogene Fehler auf: zu vergessen, dass / immer eine Gleitkommazahl zurückgibt; != statt ~= zu verwenden (Syntaxfehler); zu erwarten, dass 0 oder "" als falsch ausgewertet werden (sie werden als wahr ausgewertet); und sich auf and/or zu verlassen, wenn der wahre Zweig false ergeben könnte.
Testen Sie immer Grenzfälle, insbesondere bei der Ganzzahldivision mit negativen Zahlen, da // gegen negative Unendlichkeit abrundet.
-- Common mistakes
-- 1. / is always float
local result = 10 / 2
print(math.type(result)) -- float, not integer!
-- 2. ~= not !=
-- if x != 5 then -- SYNTAX ERROR!
if 3 ~= 5 then print("not equal") end
-- 3. 0 is truthy
if 0 then print("0 is truthy in Lua!") end
-- 4. Negative floor division
print(-7 // 2) -- -4 (not -3!)Kurztest
Welches Ergebnis liefert -7 // 2 in Lua?
Rückblick: Arithmetische und relationale Operatoren
Die wichtigsten behandelten Punkte:
/gibt immer eine Gleitkommazahl zurück;//rundet gegen negative Unendlichkeit ab^gibt immer eine Gleitkommazahl zurück und ist rechtsassoziativ~=ist der Ungleich-Operator (nicht!=)and/orgeben Operanden statt boolescher Werte zurück – dadurch ist das Idiom für Standardwerte möglich- Nur
nilundfalsewerden als falsch ausgewertet –0und""als wahr - Bitweise Operatoren (
& | ~ << >>) erfordern Ganzzahlen in Lua 5.3+
Als Nächstes: Typumwandlung und explizite Konvertierungsfunktionen.
Häufig gestellte Fragen
Ist die Lektion „Arithmetische und relationale Operatoren“ kostenlos?
Ja — der vollständige Text von „Arithmetische und relationale Operatoren“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Lua Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Lua Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Arithmetische und relationale Operatoren“?
Verwenden Sie +, -, *, /, //, %, ^ und Vergleichsoperatoren effektiv Du übst Lua Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Lua Academy zu starten?
Keine Vorkenntnisse erforderlich. Lua Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Arithmetische und relationale Operatoren“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Lua Academy-Lektion Code schreiben und ausführen?
Ja. Jede Lua Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Überblick über Lua-Datentypen
- Variablen in Lua deklarieren
- Arithmetische und relationale Operatoren
- Typkoerzierung und Typkonvertierung