C_curs5_v3Limbaj de programare C5
Transcript of C_curs5_v3Limbaj de programare C5
-
7/31/2019 C_curs5_v3Limbaj de programare C5
1/15
Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
Cursul V
Limbaje deprogramare
-
7/31/2019 C_curs5_v3Limbaj de programare C5
2/15
Tipurifundamentalededate
char signed char unsigned char
short int long
unsigned short unsigned unsigned long
float double long double
2 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
3/15
Tipurifundamentalededate
0 1 1 0 0 0 0 1
3
Litera a" este memorat pe un octet astfel
7 6 5 4 3 2 1 0
Fiecare celul reprezint un bit i fiecare bit estenumerotat (ncepnd cu cel mai puin semnificativ). Biiicare formeaz un octet sunt fie "on", fie "off", aceste strifiind reprezentate prin 1 i 0.
Astfel, variabila a" poate fi gndit ca irul de bii01100001 = 64 + 32 + 1 = 97
0*27 + 1*26 + 1*25 + 0*24 + 0*23 + 0*22 + 0*21 + 1*20
Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
4/15
Tipurifundamentalededate
De obicei, tipul char este echivalent cu unsigned char,se memoreaz pe un octet (deci poate ine 256 valori
distincte). Pentru signed char, valorile sunt ntre 128i 127, iar pentru unsigned char ntre 0 i 255.
4 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
5/15
int
Tipul de date "int" este cel mai folosit tip din limbajul C.Acest tip, mpreun cu alte tipuri ntregi (cum ar fi: char,short i long) este desemnat pentru lucrul cu valori
ntregi. n matematic, numerele naturale sunt 0, 1, 2, ..., care
mpreun cu cele negative formeaz numerele ntregi. Pe omain, se pot reprezenta numai o submulime finit aacestor numere.
De obicei, un int se memoreaz pe un cuvnt de main.
PCurile reprezint cuvntul pe 16 bii (2 octei). MS Visual C are i tip de dat__int64 (int pe 8 octei)
dar acest tip nu exist n alte compilatoare C.
5 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
6/15
Semnulnumerelorntregi
0 1 1 0 0 0 0 1
6
97 =
n urma atribuirii valorii 97 la unsigned char x ichar y rezult la evaluare a=97 i b=97.
225 =
n urma atribuirii valorii 225 ctre unsigned char x
i char y rezult:11100001 = 128 + 64 + 32 + 1 = 225(=x)11100001 = ?!?!?!?!?!?!?!?!?!?!? = -31(=y)
1 1 1 0 0 0 0 1
Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
7/15
Semnulnumerelorntregi
De unde 31? (31 scris n baza 2 este: 11111)
Prin atribuirea lui 225 unei variabile care poate stocavalori ntre 128 i +127 are loc o depire(overflow).
Exemplu de depire n baza 10:Presupunem c tim s stocm numai o cifr, Fie numrul 7
3 este complementul lui 7 n baza 10 (cel mai mic numr care adunat la 7determin o depire trecerea la dou cifre)
9+(-7)=2 la fel cum9+ 3 =2 (de fapt 9 + 3 = 12 dar cum nu putem stoca dect o cifr 1
din 12 se pierde)
7 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
8/15
Semnulnumerelorntregi
n urma atribuirii valorii 225 ctre char a iunsigned char b rezult:
11100001 = 128 + 64 + 32 + 1 = 225(=x)11100001 = ?!?!?!?!?!?!?!?!?!?!? = -31(=y)
De unde 31? (31 scris n baza 2 este: 11111, nu seamn cunumrul de mai sus)
. 225+31=256 (dar 256 este numrul maxim de valori ce pot fi stocate
pe un byte=8 bii). Deci, 31 este complementul lui 225 n
sistemul nostru de stocare. n cazul unui overflow primesc complementul
numrului
8 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
9/15
Semnulnumerelorntregi
225 = Cum se gsete simplu complementul unui numr scris n
baza 2 pe 8 bii: Se schimb toi biii 1 cu 0 i toi biii 0 cu 1.
i se adun 1
= 31
Atenie! Complementul lui 31 este 225 numai la
reprezentarea pe 8 bii (un byte). De exemplu, lareprezentarea numerelor ntregi pe 16 bii (2 bytes)complementul lui 31 este 65505.
9
1 1 1 0 0 0 0 1
0 0 0 1 1 1 1 0
0 0 0 1 1 1 1 1
Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
10/15
Numerereale virgul fix
Exemplu:Convertim 46.25 n baza 2
Convertim partea ntreag46 = 101110
Convertim partea fracionar nmulindo repetat cu 2,extrgnd de fiecare dat partea ntreag a rezultatului0.25 * 2 = 0.5 (extragem drept bit 0)0.5 * 2 = 1.0 (extragem drept bit 1)
46.25=101110.01
Ne oprim cnd partea fracionar este 0 sau cnd seatinge precizia maxim a calculatorului (ca de exemplu
n cazul numrului zecimal 1.1)10 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
11/15
Numerereale virgul mobil
Reprezentarea n virgul fix poate descrie numerefoarte mari sau numere foarte mici numai cu o risip
uria de memorie. Soluia virgula mobil (floating point)
numr = mantisa * 10exponent
3.14 = 0.314 * 101
1999 = 0.1999 * 104
101.0101 = 0.101010 * 23
0.000111 = 0.111000 * 23
11 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
12/15
Numerereale reprezentare
Dac un float este reprezentat pe 32 bii: bitul 31 (cel mai semnificativ) este folosit pentru semn, mantisa ocup 23 bits dup semn (biii 308) 8 bii pentru exponent (biii 70) unul din biii exponentului ar trebui s stocheze semnul
acestuia!
Adunarea a dou numere floating point: Cele dou numere trebuie s aib acelai exponent Se egalizeaz exponenii modificnduse cel mai mic numr
prin deplasarea punctului zecimal spre dreapta Se adun mantisele Se normalizeaz rezultatul n forma 0.xxx * 10xx
12 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
13/15
sizeof();
C pune la dispoziie operatorul sizeof() pentrudeterminarea numrului de octei necesari memorrii unui
obiect. O expresie de forma
sizeof(obiect)
returneaz un ntreg. Un obiect poate fi un tip, cum ar fi intsau float, poate fi o expresie, cum ar fia+b, sau poate fi un ir sau o structur.
13 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]
-
7/31/2019 C_curs5_v3Limbaj de programare C5
14/15
sizeof();
C este flexibil n ceea ce privete necesarul de memoriepentru tipurile fundamentale situaiile pot s difere de la
o maina la alta. Totui, ntotdeauna:sizeof(char) = 1sizeof(short)
-
7/31/2019 C_curs5_v3Limbaj de programare C5
15/15
Funciimatematice
Nu exist funcii matematice implicite ci acestea suntdescrise n biblioteci. De exemplu, funciile
sqrt() pow() exp() log()sin() cos() tan()
sunt definite n biblioteca . Toate aceste funcii,
cu excepia lui pow(), au un argument double ireturneaz double. Funcia pow() are dou argumentede tip double i returneaz double.
15 Limbaje deprogramare Conf.dr.L. STOLERIU [email protected]