Operatori
Operatorii limbajului de scripting TapHome: aritmetici, de comparație, pe biți și logici, cele 10 niveluri de precedență, capcana a & 1 > 0, evaluarea prin scurtcircuitare și echivalentele din Excel.
Lista operatorilor
Limbajul de scripting are operatori aritmetici, de comparație, pe biți și logici:
| Grupă | Operatori | Exemplu |
|---|---|---|
| Unari | - (negare), +, ! (NOT logic) | !IsRaining |
| Multiplicativi | *, / | (20.5 + 9.5) / 2 este 15 |
| Aditivi | +, - | "T=" + Te concatenează textul |
| Deplasare | <<, >> | 8 << 2 este 32 |
| Relaționali | <, <=, >, >= | Te > 25 |
| Egalitate | = (egal), <> sau != (diferit) | Mode <> 2 |
| AND pe biți | & | 3 & 1 este 1 |
| OR, XOR pe biți | |, ^ | 2 | 1 este 3 |
| Logici | AND, XOR, OR | Te > 25 AND Hu > 60 |
| Atribuire | := și formele compuse +=, -=, *=, /=, <<=, >>=, &=, |=, ^= | x += 1 |
XOR aplicat la două numere este un XOR pe biți: 5 XOR 1 este 4. Aplicat la TRUE și FALSE este XOR logic.
Limbajul nu are NOT, ==, %, **, && sau ||. În locul lor se folosesc !, =, MOD, POWER, AND și OR. 1 == 1 eșuează cu Wrong number of literals and operators in expression, NOT x cu Unknown variable or constant 'NOT'.
Precedența
Operatorii se evaluează în această ordine, de la precedența cea mai mare la cea mai mică. Operatorii de același nivel se evaluează de la stânga la dreapta; parantezele ( ) schimbă ordinea.
*/+-<<>><<=>>==<>!=&|^ANDXOROR
Spre deosebire de C sau JavaScript, operatorii pe biți leagă mai strâns decât
ANDșiOR, dar mai slab decât comparațiile.a & 1 > 0înseamnăa & (1 > 0). Se scrie întotdeauna(a & 1) > 0.
VAR flags := 2;
flags & 2 > 0;
# Result: 0, read as flags & (2 > 0), which is flags & 1
(flags & 2) > 0;
# Result: TRUEO atribuire compusă are precedența operației sale: x -= a - b se evaluează ca (x -= a) - b, iar x *= 1 + 2 ca (x *= 1) + 2. Partea dreaptă se pune între paranteze:
VAR total := 10;
total -= (a - b);Evaluarea prin scurtcircuitare
AND și OR evaluează partea dreaptă doar când partea stângă nu decide încă rezultatul. XOR evaluează întotdeauna ambele părți. O condiție poate deci proteja expresia de lângă ea:
va2 <> 0 AND va1 / va2 > 1;
# Result: FALSE when va2 is 0, without the Division by zero errorPartea dreaptă nu se evaluează când va2 este 0. Aceeași protecție pentru o valoare o oferă IF, care evaluează doar ramura selectată.
Echivalente în Excel
Operatorii pe biți corespund acestor funcții din Excel și Google Sheets:
| TapHome | Excel, Google Sheets | Exemplu |
|---|---|---|
a & b | BITAND(a, b) | 3 & 1 este 1 |
a | b | BITOR(a, b) | 2 | 1 este 3 |
a ^ b | BITXOR(a, b) | 6 ^ 3 este 5 |
a << n | BITLSHIFT(a, n) | 8 << 2 este 32 |
a >> n | BITRSHIFT(a, n) | 32 >> 2 este 8 |
În Excel
^înseamnă ridicare la putere; în TapHome este XOR pe biți. Pentru puteri se foloseștePOWER.IF,AND,ORșiMODau același sens în ambele, dar în TapHomeANDșiORsunt operatori plasați între operanzi.
Consultați exemplul operațiilor pe biți în Google Sheets: https://docs.google.com/spreadsheets/d/1hF5FMpGMJbgYh-YLwWrq2n186_ATyGyLUb689__IhLY/edit?usp=sharing sau încercați instrumentul interactiv http://bitwisecmd.com/. Funcțiile care citesc și scriu biți și octeți individuali se găsesc pe pagina Operații pe biți.