Documente Academic
Documente Profesional
Documente Cultură
LUCRAREA NR. 6
>>
&
n afar de aceti operatori binari, limbajul ne mai pune la dispoziie un operator unar
care permite determinarea complemetului fa de 1 al operandului. Acest operator este ~
i are aceeai prioritate ca i ceilali operatori unari existeni n limbaj.
Operatorii &, ^ i | sunt folosii, de obicei, pentru a realiza operaiile dorite asupra
primului operand n conformitate cu o configuraie de bii indicat de cel de-al doilea
operand. Din acest motiv, de foarte multe ori, cel de al doilea operand mai este numit i
masc pentru c nu face dect s mascheze anumii bii din primul operand. Aceti
operatori se aplic fiecrui bit din reprezentarea intern (binar, n virgul fix) a
numrului.
Operatorii de deplasare << i >>
<< Deplaseaz la stnga numrul din stnga operatorului cu un numr de poziii egal
cu numrul existent n dreapta operatorului.
Exemplu: rezultatul expresiei
n << 3
este valoarea numrului n deplasat cu 3 (trei) poziii la stnga.
Deplasarea la stnga completeaz poziiile rmase libere cu zerouri. Deplasarea cu
o poziie a numrului n este echivalent cu o nmulire cu 2 a valorii iniiale a numrului n
i n exemplu dat (n<<3) expresia este echivalent cu n * 2 * 2 * 2.
PROGRAMAREA CALCULATOARELOR
LUCRAREA NR. 6
8
0
7
0
6
0
5
1
4
0
3
0
2
1
1
1
0
0
Dup deplasarea cu trei poziii la stnga, coninutul celor doi octei asociai variabilei
n are urmtoarea reprezentare binar:
15 14 13 12 11 10 9
0 0 0 0 0 0 0
8
1
7
0
6
0
5
1
4
1
3
0
2
0
1
0
0
0
Rezultatul deplasrii spre dreapta cu trei poziii a valorii iniiale a variabilei n are
urmtoarea reprezentare binar:
15 14 13 12 11 10 9
0 0 0 0 0 0 0
8
0
7
0
6
0
5
0
4
0
3
0
2
1
1
0
0
0
i este folosit pentru a pune pe zero (a reseta) anumii bii din variabila luat n considerare
(biii respectivi se terg). Datorit acestui mod de lucru, folosirea operatorului & permite
scoaterea n eviden a biilor care ne intereseaz.
Exemple:
a). c = n & 0100;
PROGRAMAREA CALCULATOARELOR
LUCRAREA NR. 6
pune pe zero toi biii lui n mai puin bitul 6 (numerotarea ncepe de la 0 (zero) i din
dreapta) care rmne la valoarea iniial.
n = 6710 = 26 + 21 + 20 = 010000112 = 01038
c = n & 01008 = 01038 & 01008 = 01008
b). c = n & 01774008 = n & 11111111
1424
3 00000000
1424
3 2;
octet superior
octet inferior
Operatorul | (SAU)
Lucreaz dup urmtorul tabel de adevr:
|
i este folosit pentru a pune pe 1 (unu) (a seta) toi biii care au valoarea 1 n "masc".
Exemplu:
z = x | MASK;
x = 6610; MASK = 0118;
z = 6610 | 0118 = 01028 | 0118 = 01138 = 7510
x = 6610; MASK = 0778;
z = 6610 | 0778 = 01028 | 0778 = 01778 = 12710
x = 6610; MASK = 6810;
z = 6610 | 6810 = 01028 | 01048 = 010000102 | 010001002 = 010001102 =
01068 = 7010
Operatorii pe bii & i | sunt diferii de operatorii logici && i ||. Operatorii logici
implic o evaluare de la stnga la dreapta a valorii de adevr a expresiilor implicate, pe
cnd operatorii care lucreaz pe bit execut operaiile ca n algebra Boolean.
Exemplu: x = 1; y = 2 x&y = 0, pe cnd x&&y = 1.
PROGRAMAREA CALCULATOARELOR
LUCRAREA NR. 6
Operatorul unar ~
Aplicarea acestui operator are ca rezultat complementul fa de 1 al operandului (biii
egali cu zero devin unu i cei egali cu unu devin zero).
Exemplu, n instruciunea:
x = x & ~077;
este folosit pentru complementarea valorii octale 077 i astfel putem realiza resetarea
(punerea pe zero) a ultimilor 6 bii ai lui x.
Exemple:
a).
x = 6610
TEMA
n cele ce urmeaz se vor folosi numai operatori de lucru pe bit pentru toate
operaiile cerute.
Se consider c bitul cel mai semnificativ al unui numr este bitul din stnga,
iar cel mai puin semnificativ este cel din dreapta.
Problema nr. 1
S se scrie un program care realizeaz rotirea la dreapta sau la stnga (n funcie de
opiunea utilizatorului) cu un anumit numr de bii a unui numr ntreg lung.
Se vor scrie funcii de rotire dreapta, rotire stnga, i afiare bit cu bit (afiarea se va
face astfel nct bitul cel mai semnificativ s apar n partea stng a reprezentrii).
PROGRAMAREA CALCULATOARELOR
LUCRAREA NR. 6
Problema nr. 2
S se scrie o funcie care are ca parametri un numr ntreg i un numr real i
returneaz un numr real i care realizeaz ridicarea unui numr oarecare la o putere
ntreag, folosind urmtorul algoritm cu aplicarea operatorilor de lucru pe bit:
Observaie: orice numr ntreg se poate exprima n baza 2.
De exemplu 2310 = 101112 = 24 + 22 + 21 + 20.
Pentru ridicarea unui numr a la puterea 23 se poate face urmtorul calcul:
a23 = a(16 + 4 + 2 + 1) = a16 a4 a2 a1
Ca urmare, pentru ridicarea unui numr la o putere ntreag trebuie s se genereze
un ir care va include valorile a avnd ca exponeni puteri ale lui 2, adic trebuie s se
genereze urmtorul ir:
a, a2, a4, a8, a16, a32, ..
Termenii acestui ir se genereaz printr-un numr relativ mic de operaii, astfel:
f = a;
f = f * f;
innd cont de observaia de mai sus, an se poate calcula fcnd apel la termenii
acestui ir, alegndu-i numai pe aceea ai cror exponeni nsumai dau puterea n. Pentru
aceasta se face operaia n&1, i dac rezultatul este 1, primul termen este a. Se
deplaseaz n spre dreapta cu o poziie. Dac n&1=1, se selecteaz a2, s.a.m.d.
S se scrie un program care citete un numr real i un numr ntreg i afieaz
rezultatul ridicrii numrului real la numrul ntreg.
Problema nr. 3
Cea mai simpl verificare a corectitudinii transmiterii unui ir de bii este s ne
asigurm c numrul biilor egali cu 1 din irul de bii este par sau impar. Pentru a realiza
acest lucru se ataeaz respectivului ir de bii un bit numit bit de paritate. Folosirea biilor
de paritate este cea mai simpl form de "cod de detectare a erorilor" folosit pentru
verificarea corectitudinii transmiterii unui mesaj n form binar.
Sunt dou variante de bii de paritate: bit de paritate par i bit de paritate impar.
Cnd se utilizeaz paritatea par, bitul de paritate este setat pe 1 dac numrul de bii
egali cu 1 dintr-un ir de bii (neincluznd bitul de paritate) este impar astfel nct numrul
total de bii (incluznd bitul de paritate) s fie par. Cnd se utilizeaz paritatea impar, bitul
de paritate este setat pe 1 dac numrul de bii egali cu 1 dintr-un ir de bii (neincluznd
bitul de paritate) este par astfel nct numrul total de bii (incluznd bitul de paritate) s fie
impar.
PROGRAMAREA CALCULATOARELOR
LUCRAREA NR. 6
Paritatea par este un caz particular de cod CRC (Cyclic Redundacy Check) care
este un cod de detectare a erorilor.
S se scrie un program care determin bitul de paritate par asociat unui numr
ntreg lung citit de la tastatur i l nscrie n bitul cel mai semnificativ (bitul de paritate va fi
1 sau 0 dup cum numrul biilor egali cu 1 din ceilali 31 de bii este impar sau par). De
asemenea, operatorii de lucru pe bit se vor folosi pentru a determina dac un numr este
par sau nu (cum?). Se va afia numrul iniial i reprezentarea binar a numrului cu
paritatea setat.
Problema nr. 4
S se scrie o funcie care folosind numai operatori de lucru pe bit calculeaz
valoarea n octal a unui numr ntreg primit ca parametru i o depune ntr-un ir de
caractere primit ca al doilea parametru. Numrul octal este reprezentat ntr-un ir de
caractere (care este al doilea parametru al funciei) i este precedat de caracterul 0. Se va
ine seama de faptul c o cifr octal poate fi reprezentat pe 3 bii.
S se scrie o funcie care folosind numai operatori de lucru pe bit calculeaz
valoarea n hexazecimal a unui numr ntreg primit ca parametru i o depune ntr-un ir de
caractere primit ca al doilea parametru. Numrul hexazecimal este reprezentat ntr-un ir
de caractere (care este al doilea parametru al funciei) i este precedat de caracterele 0x.
Se va ine seama de faptul c o cifr hexazecimal poate fi reprezentat pe 4 bii.
S se scrie un program care citete de la tastatur un ntreg fr semn i folosind
cele dou funcii de mai sus, afieaz reprezentarea hexazecimal sau octal a numrului.
Opiunea de afiare este dat de utilizator.
Problema nr. 5
S se scrie un program care folosete numai operatorii de lucru la nivel de bit pentru
a realiza mpachetarea unei date calendaristice ntr-un ntreg de doi octei (astfel biii 0-4
reprezint ziua, biii 5-8 reprezint luna, biii 9-15 reprezint anul numrat de la 1900) i
afiarea reprezentrii binare a rezultatului.
ATENIE: NU se folosesc vectori.
Se va defini tipul de dat WORD ca sinonim pentru ntreg scurt fr semn.
Data se citete sub forma: zz/ll/aaaa.
Se vor scrie obligatoriu funcii pentru: mpachetare dat, afiare binar.
PROGRAMAREA CALCULATOARELOR
LUCRAREA NR. 6
Problema nr. 6
S se scrie un program care determin i afieaz toate numerele prime inferioare
unui numr dat (prestabilit), folosind ciurul lui Eratostene. Metoda const din eliminarea
succesiv a numerelor neprime prin parcurgerea urmtorilor pai:
1. Se elimina numrul 1 (prin definiie nu este prim).
2. Apoi se caut (pornind de la ultimul numr prim considerat - iniial 1) primul numr
neeliminat (acesta este prim) i se elimina toi multiplii si (din intervalul 1-n).
3. Se repet pasul 2 pn cnd numrul prim considerat este mai mare dect sqrt(n)
adic radical din n. Funcia sqrt are prototipul n math.h.
Pentru rezolvare nu se vor folosi vectori, fiecrui numr natural fiindu-i asociat un bit
a crei valoare este 1 dac numrul este prim i 0 dac numrul nu este prim.
Problema nr. 7
S se scrie o funcie care, folosind numai operatori de lucru pe bit, verific dac un
numr natural este o putere a lui 2 (un numr natural este o putere a lui 2 dac, n
reprezentare binar, numrul are exact un bit egal cu 1). Funcia primete ca parametru
numrul de analizat i returneaz 1 sau 0 dup cum numrul este sau nu putere a lui 2.
(NU se vor folosi operatorii aritmetici "/" sau "%").
S se scrie o funcie care, folosind numai operatori de lucru pe bit, inverseaz cei doi
octei ai unui numr ntreg reprezentat pe doi octei. Funcia primete ca parametru un
numr ntreg i returneaz numrul cu octeii inversai. (NU se vor folosi operatorii
aritmetici "/" sau "%").
S se scrie o funcie care primete ca parametri un vector de ntregi i dimensiunea
acestui vector. Funcia asociaz fiecrui element din vector un bit dintr-un ntreg i pune
bitul respectiv pe 1 dac elementul are o valoare par i pe 0 dac elementul respectiv are
o valoare impar i returneaz numrul astfel construit. (NU se vor folosi operatorii
aritmetici "+", "-", "*", "/" sau "%").
S se scrie un program care face una din prelucrrile de mai sus, n funcie de
alegerea utilizatorului.