PC Laborator 3: Diferență între versiuni
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*/