Diferență între revizuiri ale paginii „PC Laborator 3”
Linia 154: | Linia 154: | ||
* ~ - negare la nivel de bit | * ~ - negare la nivel de bit | ||
− | == Exemplu operator AND == | + | === 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. | 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. | ||
Linia 168: | Linia 168: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | |||
== Exemplu operator de deplasare << == | == Exemplu operator de deplasare << == |
Versiunea de la data 24 septembrie 2015 13:48
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.
Tipuri reale(float,double) și virgulă mobilă
Un număr este reprezentat în virgulă mobilă printr-un cuvant de n biți,conținând:
s | e | m |
---|
Unde s este bitul de semn al numarului, cu aceeași convenție ca pentru numere in virgulă fixa(s=0 numar pozitiv si s=1 numar negativ), m este mantisa numarului, reprezentând cifrele semnificative, iar e este exponentul (puterea la care trebuie ridicata o valoare)
Valoarea numarului real reprezentat in virgula mobila este data de expresia:
valoare=[(-1)]^s*m*(bază)^e
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 operatori relaționari și logici
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*/
Exemplu operator de negare ~
Operatorul de negare realizează complementarea biților,biții de 0 se pun 1,iar biții de 1 se pun 0.
int a= 2200; /* 1000 1001 1000*/
a=~a; /* 0110 0110 0111*/