Documente Academic
Documente Profesional
Documente Cultură
n−2
xk 2 k pentru numar intreg
x= k =0
n−2
xk 2 k − n +1 pentru numar subunitar
k =0
1
[y]d = 110100
[y]d = 110100
[y]i = 101011
0 xn − 2 xn − 3 ...x1 x0 daca x ≥ 0
[x]c =
1~
xn − 2 ~
xn − 3 ...~
x1~x0 daca x < 0
unde, prin definitie, 1~xn−2 ~xn−3 ...~x1 ~x0 = 2 n − x . Se poate stabili o relatie
importanta pentru reprezentarea numerelor negative in cod complementar.
Daca x<0. atunci:
x c = 1~
xn − 2 ~
xn − 3 ...~ x0 = 2 n − x = x + [x ]i + 1 − x = [x]i + 1
x1~
2
Acest rezultat reprezinta si o metoda pentru determinarea reprezentarii
numerelor negative in cod complementar.
[y]d = 110100
[y]i = 101011+
1
[y]c = 101100
opfin = xs ⊕ ys ⊕ op
3
unde xs si ys sunt bitii de semn ai celor doi operanzi. Aceasta relatie poate fi
obtinuta daca se studiaza toate cele opt combinatii posibile la adunarea /
scaderea a doua numere pozitive / negative. Se disting doua cazuri:
4
3) x>0, y<0, |x|<|y|. La adunare nu apare transport de la rangul de
semn.
5
3) x>0, y<0, |x|<|y|. La adunare nu apare transport de la rangul de
semn.
a) Numere intregi.
n−2 n−2
k
x⋅ y = x⋅ yk ⋅ 2 = x ⋅ yk ⋅ 2k
k =0 k =0
0 daca yk = 0
x ⋅ yk ⋅ 2 k =
x ⋅ 2k daca yk = 1
6
sau, |x|2k reprezinta |x| deplasat spre stanga k pozitii.
b) Numere subunitare.
n −1 n −1
−k
x⋅ y = x⋅ y− k ⋅ 2 = x ⋅ y− k ⋅ 2 − k
k =1 k =1
0 daca yk = 0
x ⋅ y− k ⋅ 2 − k =
x ⋅ 2− k daca yk = 1
7
trecut apoi in cod invers:
[x ⋅ 2]d
= 1.x− 2 x− 3 x− 4 x− 5 000000
trecut acest numar in cod invers:
[x ⋅ 2 ]
−1
d = 1.0 x−1 x− 2 x−3 x− 4 x−5 0000
[x ⋅ 2 ] = 1.1x
−1
i −1 x − 2 x − 3 x − 4 x − 51111
8
Fie x<0 (se va considera un numar subunitar, pe 6 biti, ca in
exemplele din acest paragraf):
[x ⋅ 2]d
= 1.x− 2 x− 3 x− 4 x− 5 000000
trecut acest numar in cod complementar:
[x ⋅ 2 ]
−1
d = 1.0 x−1 x− 2 x−3 x− 4 x−5 0000
[x ⋅ 2 ] = 1.1~x
−1
c
~ ~ ~ ~
−1 x− 2 x− 3 x− 4 x− 5 0000
9
este necesar sa se adune produsele partiale, care sunt scrise tot in cod
complementar, iar la operatia de adunare se aduna si bitii de semn.
Metoda comparatiei
citeste x,y
daca |x| |y| atunci
scrie „Eroare!”
altfel
qs = xs ⊕ ys
rs = xs
|r| =|x| //initializare rest partial
pentru i=1,m executa
|r| = |r|•2 //deplaseaza o pozitie stanga
daca |r| > |y| atunci
q-i = 1 //bitul curent al catului
|r| = |r| - |y|
altfel
q-i = 0 //bitul curent al catului
|r| = |r|
|r| = |r|•2-m //rest final
scrie q, r
10
Se observa ca pentru furnizarea restului final s-a efectuat o corectie
reprezentata printr-o inmultire cu 2-m. Acest lucru rezulta din urmatoarele
considerente (s-a notat prin r(k) restul partial la pasul k):
|r(0)| = |x|
|r(1)| = 2•|r(0)| - q-1•|y|
|r(2)| = 2•|r(1)| - q-2•|y|
........
|r(m)| = 2•|r(m-1)| - q-m•|y|
1 daca 2 ⋅ r ( k −1) ≥ y
unde q− k = . In ultima relatie de mai sus se
0 altfel
inmultesc ambii membri cu 2-m, inlocuidu-se succesiv fiecare r(k) din relatia
precedenta in functie de r(k-1). Se obtine:
2-m•|r(m)|=
=-2-m•q-m•|y|+2-m•2•(2•...•(2•|x|-q-1•|y|)...-q-m+1•|y|)=
=2-m•2m•|x|-|y|•(q-1•2-1+q-2•2-2+...+q-m•2-m)=
=|x|-|y|•|q|
11