Sunteți pe pagina 1din 4

Programare Procedurală

Seria 10
Laborator 1

Laborator 1

1.Conversia ȋn binar

Reprezentarea în memorie a numerelor întregi se face printr-o secvență de cifre de 0 și 1.


Echivalentul unui număr în baza 2 se obţine prin împărțirea succesivă a numărului la 2 până când
acesta devine 0. La fiecare împățire se reţine restul (care poate fi 0 sau 1). Se citeșye numărul invers,
(de la dreapta la stanga).

De exemplu pentru numărul 11 :

• 11 / 2 = 5, rest 1
• 5 / 2 = 2, rest 1
• 2 / 2 = 1, rest 0
• 1 / 2 = 0, rest 1

Așadar numărul 11 în binar este 1011.

În Python conversia se poate realiza folosind funcţia bin. Numerele binare ȋn Python sunt
precedate de prefixul 0b sau 0B

Exerciţiu: Realizați manual conversia ȋn binar a numerelor 143, 91, 76, 184 și 209 verificȃnd
rezultatul obținut folosind funcția bin disponibilă ȋn Python.

2. Operaţii pe biţi

Operaţiile se efectueaz asupra biţilor din reprezentarea internă a numerelor.

2.1. Operatorul de negaţie

Este un operator unar care întoarce numrul întreg a cărui reprezentare internă se obţine din
reprezentarea internă a numărului iniţial, prin complementarea faţă de 1 a fiecărui bit(1→0 și 0→1).

În Python operatorul de negaţie este ~.

Exerciţiu: Realizați operația de negație pentru numerele 13, 9, 17 verificȃnd rezultatul


obținut folosind Python.
Programare Procedurală
Seria 10
Laborator 1
2.2. Operatorul de conjuncţie (și)

Este un operator binar care returnează numărul întreg a cărui reprezentare internă se obţine
prin conjuncţia biţilor care apar în reprezentarea internă a operanzilor. Conjuncţia se face cu toate
perechile de biţi situaţi pe aceeași poziţie.

Tabelul pentru conjuncţia logică:

a b &
0 0 0
0 1 0
1 0 0
1 1 1

De exemplu 5 & 3=1.

În Python operatorul pentru conjuncţia logică este &.

Exerciţiu: Realizați manual conjuncţia logică a numerelor (156;31), (84; 19) verificȃnd
rezultatul obținut folosind Python.

2.2. Operatorul de disjuncţie (sau)

Este un operator binar care returnează numărul întreg a cărui reprezentare internă se obţine
prin disjuncţia biţilor care apar în reprezentarea internă a operanzilor. Disjuncţia se face între biţii
situaţi pe aceeași poziţie.

Tabelul pentru disjuncţia logică:

a b |
0 0 0
0 1 1
1 0 1
1 1 1

De exemplu 15 | 3=15.

În Python operatorul pentru disjuncţia logică este |

Exerciţiu: Realizați disjuncţia logică a numerelor (156;31), (84; 19) verificȃnd rezultatul
obținut folosind Python.
Programare Procedurală
Seria 10
Laborator 1
2.3. Operatorul “sau exclusiv”

Este un operator binar care returnează numărul întreg a cărui reprezentare internă se obţine
prin operaţia de “sau exclusiv” asupra biţilor care apar în reprezentarea internă a operanzilor.
Operaţia de “sau exclusive” se face între biţii situaţi pe aceeași poziţie.

Tabelul pentru “sau exclusiv”:

a b ^
0 0 0
0 1 1
1 0 1
1 1 0

De exemplu 15 ^ 3=12.

În Python operatorul pentru disjuncţia logică este ^.

Exerciţiu: Realizați “sau exclusiv” pentru numerele (156;31), (84; 19) verificȃnd rezultatul
obținut folosind Python.

2.4. Operatorul “shift left”

Este un operator binar care returnează numărul întreg a cărui reprezentare este obținută din
reprezentarea internă a primului operand prin deplasare la stânga cu un număr de biți egal cu al
doilea operand.

De exemplu 4<<2=16.

În Python operatorul shift left este <<.

Exerciţiu: Realizați shift left manual pentru perechile (4;3), (21; 2) verificȃnd rezultatul
obținut folosind Python.

2.4. Operatorul “shift right”

Este un operator binar care returnează numărul întreg a cărui reprezentare este obținută din
reprezentarea internă a primului operand prin deplasare la dreapta cu un număr de biți egal cu al
doilea operand. Prin deplasarea la dreapta, primii biți din reprezentarea internă a numărului
(pozițiile 1,2, ș.a.m.d.) se pierd iar ultimii se completează cu zero.
Programare Procedurală
Seria 10
Laborator 1
De exemplu 14>>2=3.

În Python operatorul shift right este >>.

Exerciţiu: Realizați shift right manual pentru perechile (4;3), (21; 2) verificȃnd rezultatul
obținut folosind Python.

3. Probleme

1. Se citește un număr întreg n. Să se calculeze n*8, n/4 si n*10 folosind operatorii logici de
deplasare la nivel de bit.
2. Se citește un număr întreg. Să se determine dacă acesta este par sau impar folosind doar
operatorii logici la nivel de biți.
3. Se citesc 2 numere întregi x și n unde n este între 0 și 15. Să se afișeze: bitul n din x.
4. Se citesc 2 numere întregi x și n unde n este între 0 și 15. Să se afișeze: bitul n din x,
numărul x în care se setează bitul numărul n la valoarea 0, numărul x în care se setează bitul
n la valoarea 1, numărul x în care se șterge bitul n, numărul x în care se complementează
bitul n.
5. Se citesc întregii x, y, n, p. Să se copieze în x, începând din poziția p, ultimii n biți din y și să
se afișeze noua valoare a lui x.
6. Să se interschimbe valoarea a două numere întregi x, y fără a folosi alte variabile (se cer
două soluții: folosind operatori aritmetici și folosind numai operatori pe biți).
7. Să se verifice dacă un număr natural 𝑛 este de forma 2𝑘 sau nu.

S-ar putea să vă placă și