TapHome

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ăOperatoriExemplu
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
LogiciAND, XOR, ORTe > 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.

  1. * /
  2. + -
  3. << >>
  4. < <= > >=
  5. = <> !=
  6. &
  7. | ^
  8. AND
  9. XOR
  10. OR

Spre deosebire de C sau JavaScript, operatorii pe biți leagă mai strâns decât AND și OR, 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: TRUE

O 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 error

Partea 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:

TapHomeExcel, Google SheetsExemplu
a & bBITAND(a, b)3 & 1 este 1
a | bBITOR(a, b)2 | 1 este 3
a ^ bBITXOR(a, b)6 ^ 3 este 5
a << nBITLSHIFT(a, n)8 << 2 este 32
a >> nBITRSHIFT(a, n)32 >> 2 este 8

În Excel ^ înseamnă ridicare la putere; în TapHome este XOR pe biți. Pentru puteri se folosește POWER. IF, AND, OR și MOD au același sens în ambele, dar în TapHome AND și OR sunt 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.