background image

Kod uzupełnień do dwóch

background image

Kod uzupełnień do dwóch (w skrócie 
U2) jest obecnie najpopularniejszym 
sposobem zapisu liczb całkowitych na 
bitach. Jego popularność wynika z 
faktu, że operacje dodawania i 
odejmowania są w nim wykonywane 
tak samo jak dla liczb binarnych bez 
znaku. Z tego też powodu oszczędza 
się na kodach rozkazów procesora.

background image

Zapis liczb

W dwójkowym systemie liczbowym 
najstarszy bit liczby n-cyfrowej ma wagę 
2n–1. Jedyną różnicą, jaką wprowadza tu 
kod U2, jest zmiana wagi tego bitu na 
przeciwną (–2n–1). Bit ten jest nazywany 
bitem znaku, ponieważ świadczy o znaku 
całej liczby – jeśli jest ustawiony (=1) cała 
liczba jest ujemna, jeśli jest skasowany 
(=0) – liczba jest dodatnia lub równa 0.

background image

STAŁOPOZYCYJ NA REPREZENTACJ A LICZB

STAŁOPOZYCYJ NA REPREZENTACJ A LICZB

(kod U2)

(kod U2)

W zapisie U2 (uzupełnień do 2) liczbę binarną można 
przedstawić jako:

a

n-1

...a

0

= -a

n-1

.

2

n-1

+a

n-2

.

2

n-2

...

+a

0

.

2

0

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze 
swoją wagą wartość ujemną

W zapisie 

W zapisie 

U2

U2

(uzupełnień do 2) liczbę binarną można 

(uzupełnień do 2) liczbę binarną można 

przedstawić jako:

przedstawić jako:

a

a

n

n

-

-

1

1

...a

...a

0

0

-

-

a

a

n

n

-

-

1

1

.

.

2

2

n

n

-

-

1

1

+

+

a

a

n

n

-

-

2

2

.

.

2

2

n

n

-

-

2

2

...

...

+a

+a

0

0

.

.

2

2

0

0

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze 

Najstarszy bit nie jest tylko bitem znaku ale niesie wraz ze 

swoją wagą wartość ujemną

swoją wagą wartość ujemną

1101

1101

U2

U2

-

-

1

1

.

.

2

2

3

3

+1

+1

.

.

2

2

2

2

+0

+0

.

.

2

2

1

1

+1

+1

.

.

2

2

-

-

8+4+1 = 

8+4+1 = 

-

-

3

3

D

D

0111

0111

U2

U2

-

-

.

.

2

2

3

3

+1

+1

.

.

2

2

2

2

+1

+1

.

.

2

2

1

1

+1

+1

.

.

2

2

4+2+1 = 7

4+2+1 = 7

D

D

Ponieważ: a

Ponieważ: a

-

-

b=a+(

b=a+(

-

-

b); 

b); 

-

-

a+b=(

a+b=(

-

-

a)+b; 

a)+b; 

-

-

a

a

-

-

b=(

b=(

-

-

a)+(

a)+(

-

-

b) to korzystnie jest 

b) to korzystnie jest 

stosować liczbę przeciwną (oznaczanej symbolem ~) do danej

stosować liczbę przeciwną (oznaczanej symbolem ~) do danej

~0111

~0111

U2

U2

1000

1000

+      1

+      1

1001

1001

U2

U2

negacja wszystkich bitów i dodanie 1

negacja wszystkich bitów i dodanie 1

-

-

7

7

D

D

7

7

D

D

background image

Kod uzupełnień do 2 zyskał swoją popularność

dzięki prostym zasadom przeprowadzania 
operacji

arytmetycznych. Dodawanie i odejmowanie w 
systemie

U2 jest analogiczne do wykonywania działań w 
zwykłym

systemie dwójkowym. Pojawiające się 
przeniesienia

poza bit znaku możemy zwyczajnie 
zignorować. Oto

przykład:

    00111001

+  11110011

    00101100

background image

Reprezentacja liczb 
rzeczywistych

Liczby rzeczywiste mają część całkowitą i ułamkową;
można je przedstawić:

          

W postaci kodu stałoprzecinkowego (stałopozycyjnego)

          

W postaci kodu zmiennoprzecinkowego 

(zmiennopozycyjnego)
Nie jest możliwe przedstawienie nieskończonych zbiorów za 
pomocą skończonej liczby bitów. Do obliczeń w komputerach 
stosuje się reprezentację skończonych podzbiorów liczb 
rzeczywistych.
Zgodne jest to ze standardem 

IEEE - 754

, gdzie określony 

został standard zapisu i działań arytmetycznych na liczbach 
zmiennoprzecinkowych

background image

ZAPIS UŁAMKÓW

Aby umożliwić zapis liczb ułamkowych, musimy rozszerzyć wagi 

pozycji w stronę ujemnych potęg podstawy. Część ułamkową 

oddzielimy od części całkowitej zapisu za pomocą znaku przecinka. 

wagi

 

  p

n-1

   

p

2

 

p

1

 

p

0

    

p

-1

 

p

-2

   

p

-m

 

cyfry

   c

n-1

 

...

 c

2

 c

1

 c

0

 

    ,       c

-1

 c

-2

 

...

 c

-m

 

  

n cyfr

 

  

m cyfr

 

 

Obliczenie wartości tak zapisanej liczby prowadzimy według 

zasady  

 c

n-1

...c

2

c

1

c

0

,c

-1

c

-2

...c

-m

  =  c

-m

p

-m

 + ... + c

-2

p

-2

 + c

-1

p

-1

 + c

0

p

0

 + c

1

p

1

 + c

2

p

2

 + 

... + c

n-1

p

n-1

 

c

n-1

c

n-2

...c

2

c

1

c

, c

-1

c

-2

...c

-m

=

 

 

n-1 

 

i=-m 

c

i

p

i

 

 

background image

PRZYKŁAD: 

Obliczyć wartość liczby stałoprzecinkowej 245,133 zapisanej w systemie 

pozycyjnym o podstawie p = 6. 

245,133

(6)

 = 3 x 6

-3

 + 3 x 6

-2

 + 1 x 6

-1

 + 5 x 6

0

 + 4 x 6

1

 + 2 x 6

245,133

(6)

 = 3 x 1/216 + 3 x 1/36 + 1 x 1/6 + 5 x 1+ 4 x 6 + 2 x 32 

245,133

(6)

 = 

3

/

216

 + 

3

/

36

 + 

1

/

6

 + 5 + 24 + 64 

245,133

(6)

 = 

1

/

72

 + 

1

/

12

 + 

1

/

6

 + 5 + 24 + 64 

245,133

(6)

 = 

(1 + 6 + 12)

/

72

 + 93 

245,133

(6)

 = 93 

19

/

72

 = 93,263888888888...

(10)

 

background image

Zapis stałoprzecinkowy 

Zapis stałoprzecinkowy

Załóżmy , że dla zapisu liczby dysponujemy ośmioma bitami. 

W zapisie stałoprzecinkowym liczbę zapisujemy w kodzie 

znak- moduł, więc najstarszy bit będzie bitem znaku. 

Pozostałe bity wykorzystujemy w następujący sposób:

o       dwa najmłodsze bity stanowią część ułamkową 

(umowa)

o       pozostałe bity część całkowitą.

PRZYKŁAD

011111,11

(2)

=31,75

(10)

background image

Dwójkowy system zmiennoprzecinkowy

 

Dwójkowa liczba zmiennoprzecinkowa zbudowana jest z dwóch części: z 

mantysy m i wykładnika  potęgowego e (zwanego również cechą). Ponieważ 

podstawa systemu liczenia jest znana i wynosi 2, więc nie ma potrzeby 

umieszczać jej w zapisie liczby. Mantysa m jest liczbą stałoprzecinkową na 

moduł mniejszą od 1. Wykładnik e jest liczbą całkowitą. Obie części mogą być 

zapisane np. w kodzie U2 lub kodzie Z-M. 

wykładnik e

 

mantysa m

 

n-bitów

 

m-bitów

 

 liczba zmiennoprzecinkowa  

Wartość liczby liczymy wg poznanego wcześniej wzoru: 

w = m x 2

e

 

background image

Przykład

00110111

(ZP)

 = ...?

(10)

 

Najpierw wydobywamy z liczby wykładnik e i mantysę m: 

0011

 

e

 

0111

 

m

 

Teraz obliczamy kolejno wartość wykładnika i mantysy: 

e

 = 

0011

(U2)

 = 

0

 x -8 + 

0

 x 4 + 

1

 x 2 + 

1

 x 1 

e

 = 

0011

(U2)

 =  2 + 1 

e

 = 

0011

(U2)

 =  3

(10)

 

m

 = 

0

,

111

(U2)

 = - 0 + 

1

/

2

 + 

1

/

4

 + 

1

/

8

 

m

 = 

0

,

111

(U2)

 = 

1

/

2

 + 

1

/

4

 + 

1

/

8

 

m

 = 

0

,

111

(U2)

 = 

4

/

8

 + 

2

/

8

 + 

1

/

m

 = 

0

,

111

(U2)

 = 

7

/

8

 

Mając wykładnik i mantysę mogę podstawić je do wzoru i obliczyć wartość 

liczby: 

w = 

m

 x 2

e

 

w = 

7

/

8

 x 2

w = 

7

/

8

 x 

8

 

w = 7, więc ostatecznie: 

00110111

(ZP)

 = 7

(10)

 


Document Outline