Deci, pentru a specifica tipul de date, utilizați tipul de specificatorul - unul sau mai multe cuvinte-cheie care definesc tipul de variabilă fiind declarată. Limbajul C ofera un set standard de tipuri de date, care pot fi construite folosind noile tipuri (, personalizate unic) de date. Această întrebare va veni mai târziu, pentru a analiza acum tipurile standard.
Tipuri de Integral: int, char, scurt, lung.
Tipuri de plutitoare: float, double.
Dacă scrieți doar semnate sau nesemnate si atunci nu pune mai mult decât orice cuvânt cheie (imediat va merge identificator de variabilă), atunci această variabilă va fi tratată ca o variabilă de tip int.
int c; (Semnificație int semnat c);
d unsigned; (Presupunând că int unsigned d);
f semnat; (Înțeles semnat int f).
Pentru a determina datele de tip întreg folosesc diferite cuvinte cheie care specifică o serie de valori și dimensiunea zonei de memorie eliberată la variabila (tab.). Notați că aceleași tipuri de date pe mașini platforme diferite pot ocupa o cantitate diferită de memorie.
dimensiunea memoriei în octeți
de la 0 la 4294967295
dimensiunea memoriei pentru variabila de tip int semnat modificator determinat de lungimea așa-numitul cod mașină, care are o dimensiune diferită pe mașini diferite. Astfel, pentru mașini de 16 biți, mărimea cuvântului este de 2 masini m-bytes, pe 32 de biți, respectiv 4 octeți, adică, int este echivalent cu tipul int scurt. sau int lung, în funcție de arhitectura utilizată de către PC. Da, în afară de dimensiunea, în octeți, de asemenea, depinde de sistemul de operare și chiar pe compilator. Astfel, unul și același program poate funcționa corect pe un computer și celălalt greșit. (.) Singurul lucru care este garantat de limba, este că scurt <= int <= long.
Este clar că toată această confuzie nu provoacă prea mult entuziasm se poate bucura doar că suntem oarecum mai ușor: există deja standarde lingvistice. Iar în momentul creației De când nu a avut nici o standardizare în mărime era încă o mare mizerie. Pentru a evita faptul că, din cauza diferitelor tipuri de dimensiuni de date a programului poate rula pe același computer și nu funcționează pe de altă parte, acesta a fost inventat de către operatorul de construcții, care poate determina memoria ocupată de lungime variabilă: sizeof ().
El lucrează la momentul compilarii, mai degrabă decât în timpul rulării, astfel încât compilatorul înlocuiește doar simbolul corespunzător mărimii variabile în bytes pe numeric și computer, sistemul de operare și compilator dumneavoastră. Folosiți-l pur și simplu: între paranteze, specificați numele variabilei a cărui dimensiune în bytes ar dori să primească. Să presupunem că definiți o variabila x de tip int. Definiți dimensiunea în octeți și nu derivă ecranul său:
int x;
2. Variabilele de tip float date care reprezintă un număr în virgulă flotantă, adică, ceea ce reprezintă o fracție zecimală. Valoarea de tip float Specificatorul este de 4 octeți. Valoarea de tip dublu este de 8 octeți în memorie. Nu există încă un dublu lung tip. Problema, însă, este că el are dimensiuni diferite pe diferite compilatoare, iar în unele este inexistentă.
3. Tipuri de conversie atunci când evaluarea expresiilor
Ei bine, ne-am întâlnit cu tipurile de date. Acum este necesar să se ia în considerare ceea ce se întâmplă în cazul în care aceeași operațiune care implică variabile de diferite tipuri.
Atunci când se efectuează operații matematice efectuate conversii de tip automate pentru a provoca operanzi de expresie la un tip comun sau de a prelungi scurt în mărime la dimensiunea de valori întregi folosite pentru instrucțiuni mașină. Efectuarea de conversie depinde de operațiunea specifică și tipul de operand sau operanzi.
Luați în considerare conversia totală a două tipuri diferite de operanzi într-un operator aritmetică: în acest caz, un mic convertit la una mai mare. Aici, prin „mai mici“ se înțelege tipul cu o valoare absolută mai mică din valoarea maximă admisă (adică, va fi mai lung decât float). „Cea mai lungă dimensiune“ tip de date este definită nu de numărul de octeți ocupate, și superioară domeniului de valori limită reprezentabil. astfel nesemnat este mai mare decât int. float - mai mult de mult.
ch unsigned char;
unsigned long in;
Descriere exemplu: atunci când alocarea va fi efectuată de regulile de conversie operatorului după cum urmează. Operand CH este convertit în cele din urmă la nesemnate de tip lung. Prin aceeași regulă, am convertit la unsigned long și rezultatul operației, între paranteze va fi de tip unsigned long. Apoi, el a convertit să se dubleze și rezultatul întregii expresie a tip dublu.
- număr întreg semnat este convertit într-un număr întreg semnat mai scurt. cu pierderea de informații: numărul tuturor biți care sunt mai sus (sau, respectiv, - de mai jos) de delimitare, care determină dimensiunea maximă a variabilei.
- număr întreg semnat este convertit într-un număr întreg lung, cu un semn. Prin semn de multiplicare. Ce este? Toți biții de adăugat un număr binar va fi ocupat de același număr, care este în bitul de semn: dacă numărul a fost pozitiv, atunci acesta va fi, respectiv, 0 dacă este negativ - 1.
- Semnat întreg la un întreg fără semn: un prim pas un întreg semnat este convertit la un întreg cu semn corespunzător unei valori țintă - adică, cea la care conduce - (în cazul în care tipul de date țintă mai mare). I a lua valoarea semnului nu este aruncat, ci doar toți biții sunt considerate normale, inclusiv un punct de reper.
- Conversia întreg semnat la tipul de flotant are loc fără pierderi de informații, cu excepția cazului de tip de conversie int lung și nesemnate int lung pentru a pluti tip. atunci când precizia poate fi pierdut de multe ori.
2. Conversia tipurilor întreg fără semn.
- unsigned integer este convertit într-un număr întreg fără semn sau mai scurt semnat de trunchiere.
- unsigned integer este convertit într-un număr întreg fără semn lung sau semnat prin adăugarea zerouri pe stânga.
- unsigned integer convertit la un întreg cu semn de aceeași mărime. Dacă luăm, de exemplu, nesemnate scurt, și scurt - în intervalul de 32768-65535 deveni negativ.
- unsigned integer este convertit la un tip plutitor. În primul rând, acesta este convertit la valoarea semnat de tip lung. care este apoi convertit într-un punct de tip flotant.
3. Conversia tipurilor plutitoare.
- Valorile de tip sunt convertite la tip float dublă, fără a schimba valorile.
- Valorile sunt convertite în dublu float c unele pierderi de precizie, adică numărul de zecimale. Dacă valoarea este prea mare pentru a pluti. efluentul de apare, raportate în timpul rulării.
- La conversia unei valori în virgulă mobilă la număr întreg tipuri este mai întâi convertit la tipul lung (partea fracționară a cantității plutitoare, astfel îndepărtat) și apoi convertit tipul de valoare dorită tipul întreg lung. Dacă valoarea este prea mare pentru mult timp. conversie rezultatul este nedefinit. De obicei, acest lucru înseamnă că orice resturi pot fi găsite la latitudinea compilatorului. În practică, aceste transformări nu în mod normal, se confruntă.
În aceste cazuri, tipul de conversie la tipul sunt implicite în natură, adică, efectuate de compilator, precum și orice rapoarte care un anumit tip pot fi reduse la un astfel de om, nr. Deși unele compilatoare raportează încă conversia implicită, ceea ce duce la pierderea de precizie sau trunchiere. Tipul implicit apare atunci când o operațiune de atribuire, în cazul în care valoarea unui tip este atribuit unui alt tip.
În plus, Xi au posibilitatea de valori explicite de un tip la altul. În acest scop, există o operațiune de distributie. care este scris după cum urmează: (nume de tip) operanzi, în cazul în care denumirea de tip specifică tipul care trebuie să fie operanzi convertit.
În acest exemplu, valoarea i, l, d va fi evident convertit la tipul specificat în paranteze rotunde.