PC Laborator 3
Obiective
Familiarizarea cu noțiunile de bază ale limbajului C: tipuri de date, operatori, dar și folosirea corectă a acestora.
Tipuri de date
Tipurile de date fundamentale ale limbajului C sunt: caractere (char), întregi (int), numere reale reprezentate în virgulă mobilă cu simplă precizie (float), numere reale reprezentate în virgulă mobilă cu dublă precizie (double) şi fără valoare (void).
Tipuri fundamentale | ||
---|---|---|
Tip | Numar de biti | Domeniu |
char | 8 | -127 ... 128 |
int | 16 | -32,768 ... 32,767 |
float | 32 | Precizie 6 zecimale |
double | 64 | Precizie 10 zecimale |
void | - | Fără valoare |
Exceptând tipul void, tipurile fundamentale pot fi precedate de diferiţi modificatori. Un modificator se utilizează pentru a adapta cât mai convenabil tipul de bază la situație.
Modificatori:
- signed
- unsigned
- long
- short
Folosirea modificatorilor | ||
---|---|---|
Tip | Numar de biti | Domeniu |
unsigned char | 8 | 0 ... 255 |
unsigned long int | 16 | 0 ... 4,294,967,295 |
Diferenţa dintre întregii signed şi unsigned constă în interpretarea diferită a bitului semnificativ (adică cel mai din stânga). Pentru un întreg signed, se va considera bitul semnificativ ca fiind bit de semn. Dacă acest bit este 0 atunci numărul este pozitiv iar dacă este 1 atunci este negativ.
Operatori
Operatorii aritmetici:
- + adunarea
- - scăderea
- * înmulţirea
- / împărţirea (rezultatul împărţirii pentru numere reale, câtul împărţirii pentru numere întregi)
- % modulo (restul împărţirii a două numere întregi)
- ++ incrementarea (mărirea unei valori cu o unitate)
- -- decrementarea (micşorarea unei valori cu o unitate)
Operatorii de incrementare/decrementare sunt folosiţi pentru creșterea/micşorarea unei valori cu o unitate.
a++ - incrementare --a - decrementare
De asemenea se pot folosi instrucțiuni de pre sau post incrementare/decrementare.
post-incrementare: x = a++
x = a;
a = a + 1;
pre-incremenatare: x = ++a
a = a + 1;
x = a;
Operatori relaţionali şi logici:
- > - mai mare
- >= -mai mare egal
- < -mai mic
- <= -mai mic egal
- = -egal
- != -diferit
- && -si
- || -sau
- ! -negare
Exemplu
int a=2,b=6,c=0,result;
result=!(a < c) && (a<b) || (b<=c);
printf("%d\n",result);
Operatori la nivel de bit:
Avem şase operatori la nivel de bit,aceștia se aplică tipurilor char,int,long signed/unsigned,iar rezultatul este un întreg. Operatorii la nivel de bit sunt următorii.
- & - AND (şi logic)
- | - OR (sau logic)
- ^ - XOR (sau exclusiv)
- << - deplasare la stânga
- >> - deplasare la dreapta
- ~ - negare la nivel de bit
Exemplu operator AND
Dorim să aflăm valoarea bitului de pe poziția 2 a numarului 20.Pentru a afla valorea acestui bit se poate realizare operația AND (&) între numărul dorit și un alt număr binar care are doar pe poziția dorită (în cazul nostru 2) valoarea 1,astfel dacă rezultatul este diferit de 0 atunci inițial am avut bitul 1, respectiv 0 dacă bitul a fost 0.
int a=20; /* 1 0 1 0 0 */
int b=4; /* 0 0 1 0 0 */
if(a & b) /* 0 0 1 0 0*/
printf("bitul are valoarea 1\n");
else
printf("bitul are valoarea 0\n");
Exemplu operator de deplasare <<
Operatorii de deplasare (<< şi >>) realizează deplasarea biţilor din operandul stâng cu atâtea poziţii câte sunt indicate de operandul drept.
int a=255; /* 0000 0000 1111 1111*/
a=a<<3; /* 0000 0111 1111 1000*/