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*/