19 iul 2007
R23222i - Tipul int pe 32 de biti
Ma intereseaza unde anume e facuta limitarea sau unde e specificat faptul ca un int se reprezinta pe 32 de biti? Daca vreau sa reprezint pe 34 de biti, ce fac?
- Adriana
Orice procesor pe lumea asta are in design-ul sau definit un numar numit "lungimea cuvantului" care defineste latimea magistralelor si, implicit, cat de mari pot fi numerele cu care el poate lucra. Latimea magistralelor este de fapt numarul de fire prin care se trimite in paralel un numar intre oricare doi registri.
Aceasta latime a magistralei s-a extins in toate componentele calculatorului, astfel incat CPU-ul comunica cu northbridge-ul, cu memoria, cu southbridge-ul etc tot prin magistrale de aceeasi latime cu a lui.
Procesoarele de tip x86, asa cum sunt PC-urile, au pornit cu o lungime a cuvantului de 8 biti (8086), au trecut prin 16 biti (80286), si incepand cu 80386 si pana azi au o lungime a cuvantului de 32 biti. Desi s-au creat si procesoare care pot lucra pe 64 de biti, 99% din PC-urile de azi si peste 99% din sistemele de operare instalate pe ele lucreaza tot pe 32 de biti.
Din motive practice, de acces la memoria RAM, pentru serverele care au instalat 4Gb de RAM si care au si memorie virtuala, s-au creat si procesoare care pot adresa spatii de adrese pe 36 de biti, adica maxim 64 Gb. Aceste procesoare, insa, folosesc 36 de biti doar pentru accesul sistemului de operare la RAM, absolut tot restul calculelor se fac tot in 32 de biti.
Revenind la 34-ul tau, acesta nu prea se poate obtine in sensul de a modifica "marimea" int-ului, pentru ca ar insemna sa modifici in toate circuitele calculatorului latimile tuturor magistralelor. Si apoi si logica interna a sistemului de operare si a tuturor driverelor.
A incerca sa trimiti unui calculator un int pe 34 de biti e ca si cum cineva ar incerca sa-ti arunce in continuu 3 portocale desi tu n-ai decat 2 maini sa le prinzi (deci "lungimea cuvantului" oamenilor este 2 :D ).
Daca vrei sa faci un program care sa faca calcule cu numere intregi mai mari de 232 (4.294.967.296) atunci poti sa folosesti tipul de date int64 pe care il ofera cam toate compilatoarele din ziua de azi. Atentie, tipul longint nu este tot una cu int64.
PS: sa nu-l crezi niciodata pe cel care iti spune ca isi aminteste el din facultate ca int-ul este o functie :))
Este adevarat ca tipul int este asociat cu cuvantul-procesor si ca el are 32 de biti pe masinile de 32 de biti, dar atunci cel putin expresia este "ciudata".
in limbajul C++, pe compilatoarele Microsoft pe 32 de biti, sunt definite urmatoarele tipuri de date pentru numere intregi:
Daca vrei sa intelegi mai multe, cauta pe google despre "aliniamentul datelor in procesor".
Spor