Diferență între revizuiri ale paginii „PC Laborator 3”
| Linia 75: | Linia 75: | ||
== Operatori == | == Operatori == | ||
| − | '''Operatorii aritmetici''' | + | '''Operatorii aritmetici''': |
* + adunarea | * + adunarea | ||
* - scăderea | * - scăderea | ||
| Linia 92: | Linia 92: | ||
pre-incremenatare: x = ++a; - echivalent cu a = a + 1; | pre-incremenatare: x = ++a; - echivalent cu a = a + 1; | ||
x = a; | x = a; | ||
| + | |||
| + | '''Operatori relaţionali şi logici''': | ||
| + | |||
| + | * > - mai mare | ||
| + | * >= -mai mare egal | ||
| + | * < -mai mic | ||
| + | * <= -mai mic egal | ||
| + | * = -egal | ||
| + | * != -diferit | ||
| + | * && -si | ||
| + | * || -sau | ||
| + | * ! -negare | ||
| + | |||
| + | == Exemplu == | ||
| + | |||
| + | <syntaxhighlight lang="C"> | ||
| + | |||
| + | int a=2,b=6,c=0,result; | ||
| + | |||
| + | result=!(a < c) && (a<b) || (b<=c); | ||
| + | |||
| + | printf("%d\n",result); | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | '''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. | ||
| + | |||
| + | <syntaxhighlight lang="C"> | ||
| + | |||
| + | 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"); | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | == 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. | ||
| + | |||
| + | <syntaxhighlight lang="C"> | ||
| + | |||
| + | int a=255; /* 0000 0000 1111 1111*/ | ||
| + | a=a<<3; /* 0000 0111 1111 1000*/ | ||
| + | |||
| + | </syntaxhighlight> | ||
| + | |||
| + | <div class="regula">'''<font color="red"> Observatie:</font> '''Deplasarea la stânga (<<) completează la dreapta cu 0, deci biţii din stânga se vor pierde.</div> | ||
Versiunea de la data 24 septembrie 2015 11:53
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++; - echivalent cu x = a;
a = a + 1;
pre-incremenatare: x = ++a; - echivalent cu 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*/