Număr întreg (tip de date)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 26 martie 2022; verificările necesită 7 modificări .

Integer , tipul de date întreg ( întreg în engleză  ) este unul dintre cele mai simple tipuri de date primitive . Servește la reprezentarea numerelor întregi , limitate de o valoare minimă și maximă, în funcție de memoria alocată numărului.

Soiuri

De regulă, pentru majoritatea sarcinilor, se folosește un tip întreg, numit și nativ int (sau pur și simplu int ), cu o lățime a cuvântului egală cu lungimea cuvântului procesorului pe care se execută programul (sau modul de operare al procesorului dacă acesta poate lucra cu cuvinte-mașină de lungimi diferite) . Dacă este necesar, pot fi utilizate numere întregi cu adâncime de biți mai mici (de exemplu, dacă este necesar, pentru a economisi memorie) și mai mari (când se utilizează aritmetică lungă ). Un alt motiv posibil pentru utilizarea numerelor întregi non-native de lungime este asigurarea portabilității datelor . Cele mai comune soiuri ale întregului:

De asemenea, dacă trebuie să economisiți memorie, dar nu este nevoie să reprezentați numere negative, pot fi folosite numere întregi fără semn, ceea ce vă permite să dublați valoarea maximă posibilă și cu încă una: de exemplu, un număr de la 0 la 65 535 poate fi reprezentat ca un întreg scurt fără semn . Uneori în literatura de specialitate [1] există recomandări de a nu folosi numere întregi nesemnate, deoarece este posibil să nu fie implementat de procesorul computerului . De asemenea, suportul pentru tipurile nesemnate lipsește în unele limbaje de programare, cum ar fi Java [2] .

Utilizarea numerelor întregi nesemnate este justificată în algoritmii care folosesc depășirea întregului - adevărul este că compilatoarele de optimizare pot schimba ordinea operațiilor și pot efectua transformări algebrice, în urma cărora depășirea în algoritmul optimizat poate apărea într-un alt moment decât în cel neoptimizat, sau deloc, ceea ce duce la un comportament nedefinit . Pentru numerele întregi fără semn, optimizările care afectează overflow aritmetic sunt dezactivate, astfel încât comportamentul overflow este întotdeauna definit, dar codul nativ generat de compilator devine mai puțin optim.

Prezentare

În memorie, un număr întreg este stocat ca o secvență de biți împărțiți în octeți (octeți). Ordinea octeților poate fi fie directă ( eng.  big-endian ), de la cel mai semnificativ bit la cel mai puțin semnificativ, fie inversă ( eng.  little-endian ).

Reprezentarea semnelor poate diferi, de asemenea, pentru diferite arhitecturi . Cel mai comun este așa-numitul cod suplimentar , în care un număr negativ este reprezentat prin scăderea de la 0 cu overflow, în timp ce dacă bitul înalt al octetului înalt este activat, numărul este considerat negativ. Mai puțin utilizate sunt codul invers (când un număr negativ este reprezentat ca inversul pe biți a unuia pozitiv), codul direct (când un număr negativ este reprezentat ca un număr pozitiv cu bitul de semn activat) sau cele mai exotice precum sistemul numeric de bază −2 [3] .

Calculatoarele și unele calculatoare timpurii au folosit și reprezentarea BCD a numerelor întregi . Un astfel de cod simplifică dispozitivul de afișare și face ca reprezentarea unui număr în memorie să fie mai lizibilă de către om, dar complică dispozitivul aritmetic-logic și necesită mai multă memorie pentru a reprezenta aceleași numere.

Operații pe numere întregi

Operații aritmetice

Operațiile aritmetice sunt aplicabile în primul rând valorilor întregi. Mai jos sunt cele mai frecvent utilizate (denumirile lor în diferite limbaje de programare și instrumente similare sunt indicate între paranteze).

În unele limbaje de programare, pentru concizie, există operatori care vă permit să efectuați o operație aritmetică cu o atribuire. De exemplu, „ +=” adaugă valoarea curentă a variabilei din stânga cu expresia din dreapta și plasează rezultatul în variabila originală. De asemenea, în unele limbi și medii, este disponibilă operația combinată MulDiv , care se înmulțește cu un număr, apoi se împarte rezultatul la al doilea.

De obicei, cele mai scumpe operațiuni din punct de vedere al vitezei sunt înmulțirea și împărțirea (obținerea restului de împărțire).

În memoria computerului, celulele de dimensiune fixă ​​sunt de obicei alocate pentru stocarea numerelor întregi. Din această cauză, operațiunile de creștere și decrementare pot duce la depășire, rezultând un rezultat distorsionat. Unele limbaje de programare vă permit să faceți o excepție în astfel de cazuri. În plus, puteți defini comportamentul de depășire:

Operații pe biți

În plus față de cele matematice, operațiile pe biți sunt aplicabile numerelor întregi , care se bazează pe caracteristicile codării binare poziționale. De obicei, acestea sunt efectuate mult mai rapid decât operațiile aritmetice și, prin urmare, sunt folosite ca analogi mai optimi.

Lucrul cu șiruri

Operațiuni destul de frecvente sunt obținerea unui șir dintr-o valoare numerică în reprezentarea internă și invers - un număr dintr-un șir. La conversia într-un șir, instrumentele de formatare sunt de obicei disponibile în funcție de limba utilizatorului.

Mai jos sunt enumerate câteva dintre reprezentările în șir ale numerelor.

Tip enumerat

Numerele întregi includ, de asemenea, un tip enumerat. . Variabilele de tip enumerate iau un set finit predefinit de valori. Mărimea unui set nu este determinată de numărul de octeți utilizați pentru a reprezenta valorile întregi ale variabilelor de acest tip.

De exemplu, în Python , booleanul este un subtip de întreg și folosește numele False și True, care, atunci când sunt transformate într-un număr întreg, primesc valorile 0 și respectiv 1 [4] .

Note

  1. Ben-Ari, 2000 , p. 54.
  2. Tipuri, valori și variabile , Java Language Specification, ed. a II-a.
  3. Hacker's Delight, 2004 , p. 215-221.
  4. Beazley, 2009 , pp. 38.

Literatură