background image

Stało- i zmiennopozycyjna 

reprezentacja liczb 

binarnych

₥@ʁ€₭ ‽ud3£k0

Urządzenia Techniki Komputerowej

background image

Reprezentacja liczb w 

systemie komputerowym

• Reprezentacja liczb w systemie 

komputerowym polega na  zamianie 
zbioru liczb rzeczywistych na 
odpowiadające im liczby binarne.

– Chcąc zapisać liczby w systemie 

komputerowym musimy dokonać 
pewnego uproszczenia.

background image

Reprezentacja liczb w 

systemie komputerowym

• Ile jest liczb rzeczywistych?

• Ile liczb zmieści się w pamięci 

komputera?

background image

Odwzorowanie liczb w 

systemie komputerowym

• Chcąc zapisać liczby w systemie komputerowym 

musimy dokonać pewnego uproszczenia.

Liczby 
rzeczywiste

Liczby w komputerze

R

1

R

2

R

3

R

4

R

6

R

7

R

5

K

1

K

2

K

3

K

4

K

5

background image

Reprezentacja liczb 

całkowitych

• w komputerze liczby przechowywane są w 

pamięci lub w rejestrach procesora o 

ustalonej liczbie pól, np. 8 lub 16

• Problemy

– Problem przepełnienia - gdy liczba jest zbyt 

duża, by móc ją zapisać przy pomocy np. 8 

bitów

– Problem niedopełnienia - gdy liczba jest za 

mała, by ją zapisać przy pomocy np. 8 bitów

– Jak zapisywać liczby ujemne?
– Pewne liczby  musimy pominąć – które i według 

jakiego algorytmu?

background image

Reprezentacje liczb z 

częścią ułamkową

• Zapis stałoprzecinkowy
• Zapis zmiennoprzecinkowy

background image

Binarna liczna stałoprzecinkowa

• Binarną liczbę stałoprzecinkową można 

potraktować jako złożenie dwóch części — liczby 
całkowitej oraz ułamkowej rozdzielonych 
przecinkiem:

Część całkowita Część ułamkowa

10110011, 0101

background image

Zapis stałoprzecinkowy

• Aby umożliwić również 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.

waga p

n-1

 … p

2

p

1

p

0

 , p

-1

p

-2

 … p

-m

 cyfry a

n-1

 … a

2

a

1

a

0

 , a

-1

a

-2

 … a

-m

background image

Zamiana liczby rzeczywistej 

dziesiętnej na binarną

• Zamianę liczby dziesiętnej na postać binarną 

przeprowadza się w dwóch etapach:

1.

zamiana liczby całkowitej na postać binarną za 

pomocą cyklicznego dzielenia przez 2;

2.

zamiana części ułamkowej na postać binarną za 

pomocą cyklicznego mnożenia przez 2. Jeżeli wynik 

jest > 1, to wyznaczony bit części ułamkowej jest 

także równy 1. Do dalszych obliczeń wykorzystujemy 

część ułamkową wyniku.

– Proces należy kontynuować aż do otrzymania 0.

– Z wyników iloczynów pobieramy wartości całkowite — 

ułamek liczby binarnej. Otrzymane liczby łączymy, 

przedzielając część całkowitą i ułamkową przecinkiem. 

– Jeżeli mnożenie przez 2 prowadzi do osiągnięcia 

nieskończenie długiej kombinacji zer i jedynek, należy 

przyjąć przybliżoną dokładność, np. do 10 miejsc po 

przecinku.

background image

Zamiana liczby dziesiętnej 

na binarną

• Przykład
• Zamieniamy liczbę 10,225 na liczbę 

binarną.

1.Podział liczby na cześć całkowitą i 

ułamkową

Część całkowita Część ułamkowa

10, 225

background image

2. Zamiana części całkowitej 

na binarną

Dzieln
a

Dzielni
k

Reszta z 
dzielenia

10

:2

0

5

:2

1

2

:2

0

1

:2

1

0

10

10

=1010

2

11

background image

3. Zamiana części ułamkowej 

na binarną

Mnożn

a

Mnożni

k

Wyni

k

Część całkowita

1 0,225

*2

0,45

0

2 0,45

*2

0,9

0

3 0,9

*2

1,8

1

4 0,8

*2

1,6

1

5 0,6

*2

1,2

1

6 0,2

*2

0,4

0

7 0,4

*2

0,8

0

8 0,8

*2

1,6

1

9 0,6

*2

1,2

1

1

0

0,2

*2

0,4

0

12

background image

4. Połączenie liczb

• Uzyskane liczby binarne scalamy w jedną.

Część całkowita

10

1010

Część ułamkowa

0,225
0,0011100110

10,225

           1010, 0011100110

background image

Ćwiczenie 

zamiana na postać binarną

1. 25,34
2. 56,95
3. 18,77
4. 21,88
5. 32,65
6. 55,55
7. 11,85
8. 34,42
9. 44,21
10.49,39

11.  

15,344

12.  

53,953

13.  

16,771

14.  

31,886

15.  

42,657

16.  

45,558

17.  

41,853

18.  

54,425

19.  

24,219

20.  

39,393

background image

Zamiana liczb binarnych na 

dziesiętne

• Chcąc zamienić liczbę binarną 

stałoprzecinkową na postać dziesiętną należy 
skorzystać z poniższego wzoru:

a

n-1

…a

1

a

0

,a

-1

…a

-m

=a

n-1

*p

n-1

+a

1

*p

1

+a

0

*p

0

,a

-1

*p

-1+…+

a

-

m

*p

-m

• Wartości wag części ułamkowych przyjmują 

postać ułamków w których dokładność jest 
określona przez wagę najmłodszej cyfry

background image

URZĄDZENIA TECHNIKI KOMPUTEROWEJ

background image

Przykład

Obliczyć wartość liczby dwójkowej 11101,011

B

11101,011

2

 = 1 * 2

-3

 + 1 * 2

-2

 + 0 * 2

-1

 + 1 * 2

0

 + 0 * 

2

1

 + 1 * 2

2

 + 1 * 2

3

 + 1 * 2

4

11101,011

2

 = * 1/8 + 1 * 1/4 + 0 * 1/2 + 1 * 1 + 0 * 

2 + 1 * 4 + 1 * 8 + 1 * 16

11101,011

2

  = 1/8 + 1/4 + 1 + 4 + 8 + 16

11101,011

2

 = 29 3/8 

Zamiana liczb binarnych na 

dziesiętne

background image

Przykład
Zamienić ułamek 12.7 na postać binarną 8-bitową, 

gdzie przecinek jest 

po czterech bitach !!!!!!!

Etap 1
Część całkowita 12

D

 to w postaci dwójkowej 1100

B

.

Etap 2
Obliczanie części ułamkowej wygląda następująco:
0.7 * 2 = 1.4 -> 1
0.4 * 2 = 0.8 -> 0
0.8 * 2 = 1.6 -> 1
0.6 * 2 = 1.2 -> 1
0.2 * 2 = ….. – tutaj przerywamy obliczenia
i stąd 12.7

D

 = 1100,1011

B

background image

• Wady reprezentacji stałoprzecinkowej (

Fixed 

Point Notation

):

•    10-cyfrowy format:      XXXXX.XXXXX

Reprezentacja 

stałoprzecinkowa

47567.31

A

0.000075244

{

obcięte

0.000075244

00000.00007

47567.31000

A

W przypadku liczb stałoprzecinkowych wystąpi duży błąd przy 
bardzo małych wartościach oraz bardzo dużych wartościach (w 
odniesieniu do powyższego formatu).

background image

Liczby rzeczywiste

• Charakterystyka:

 Liczby rzeczywiste mają cześć całkowitą i ułamkową

 Nie można już przyjąć, że przecinek leży po prawej stronie (bo 

wtedy byśmy mieli tylko liczby całkowite) ani, że leży po lewej 
stronie (bo wtedy byśmy mieli tylko liczby ułamkowe)

 Niezbyt „ekonomiczne” byłoby używanie kodowania w 

systemie stałoprzecinkowym  (np. przecinek rozdziela dwa 
bajty)

• Co chcemy tak naprawdę uzyskać? 

• System kodowania dla którego błąd względny będzie tego samego 

rzędu dla wszystkich wartości biorących udział w obliczeniach.

background image

Skalowanie liczby

• Dostosowywanie skali liczby ułamkowej:

0.000075244

4

0.75244 10

B

5

7.5244 10

B

i tak 
dalej ...

47567.31

A

47567.31 0.75244 0.0001

A B

 

Możliwość wykonania działania z 
zastosowaniem wszystkich cyfr znaczących. 
Wynik jednak musi być dodatkowo pomnożony 
przez wykładniczy współczynnik korygujący.

background image

Zapis zmiennopozycyjny

Z zapisem zmiennoprzecinkowym można 

spotkać się w przypadkach, gdzie przy jego 
pomocy przedstawia się albo bardzo duże 
wartości, albo bardzo małe. Zapis ten nazywa 
się często notacją naukową, np.:

Gwiazda Proxima Centauri znajduje się w 

odległości 9460800000000 [km], czyli 
9,4608 * 10

12

.

Masa elektronu wynosi m

e

 = 

0,00000000000000000000000000091095 
[g], czyli  9,1095 x 10

-28

 [g] 

background image

1.4.2. Liczby zmiennoprzecinkowe (zmiennopozycyjne)

W porównaniu z liczbami stałoprzecinkowymi liczby 
zmiennoprzecinkowe (ang. floating-point numbers — FP) 
umożliwiają obsługę większego zakresu liczb (bardzo małych lub 
bardzo dużych), jednak kosztem wolniejszego przetwarzania i 
mniejszej dokładności.
 
 
 
Termin „zmiennoprzecinkowe" oznacza, że nie istnieje stała liczba 
cyfr przed przecinkiem i po przecinku.

background image

Liczba zapisana w systemie zmiennoprzecinkowym składa się z dwóch 
części: liczby stałoprzecinkowej, której wartość bezwzględna jest 
mniejsza od wartości podstawy systemu pozycyjnego oraz z podstawy 
podniesionej do pewnej potęgi zwanej wykładnikiem lub cechą. 
Wartość liczby jest równa iloczynowi części stałoprzecinkowej i 
wykładniczej:

w = m * b

e

,

m - mantysa, b - podstawa systemu, e - wykładnik potęgowy.

background image
background image
background image

1111      1001

e = 1(-2

3

)+1*2

2

+1*2

1

+1*2

0

 = 

        -8     +4    +2     +1      = -1

Liczymy cechę!   

1111

background image

1111      1001

Liczymy mantysę!   

1001 – dzielimy na dwie części 10,01 

traktujemy jak liczbę stałoprzecinkową z przedziału 1,2

m = 1(-2

1

)+0*2

0

+0*2

-1

+1*2

-2

 = 

        -2     +0    +0     +1/4      =  -2+1/4 = -1 

¾ = -1,75

10,01

background image

1111      1001

m = 

-1,75

e = -1

cecha               mantysa

L

FP

 = m*2

e

L

FP

 = -1,75 * 2

-1  

 

      = -1,75 * ½

          

=  -1,75 * 0,5

 

      = - 0,875

background image

Zadanie - ćwiczenie

Oblicz wartość liczby
1. 00010101

B

2. 01010110

B

3. 00011100

B

4. 10110101

B

e = 0*(-2

3

) + 0*2

2

 + 0*2

1

 + 1*2

= 0 + 0 +0+ 1 = 1

M 01,00  m = 0*(-2

1

) + 1*2

0

 + 0*2

-1

 +0*2

-2

 = 0+1+0+0=1

L

FP

 = 1*2

1

=2

background image

Obliczanie reprezentacji zmiennoprzecinkowej
Mamy określony format zapisu liczby 

zmiennoprzecinkowej w systemie dwójkowym. 

Wiemy, że wykładnik ma zawierać n - bitów w 

kodzie U2, a cecha m bitów w zapisie 

stałoprzecinkowym U2.

Przykład prostego systemu zmiennoprzecinkowego, w 

którym wykładnik i cecha mają po 4 bity długości. 

Przykładową liczbą niech będzie wartość 56:

56

D

 = 111000

B

 = 0111000

U2

 - dodajemy zero, aby 

zaznaczyć, iż jest to liczba dodatnia.

Zapiszemy wzór obliczeniowy, a następnie będziemy 

przesuwać w prawo cyfry mantysy dodając 

jednocześnie 1 do wykładnika, aż znacząca jedynka 

znajdzie się na pozycji o wadze 1/2. 

Zadanie do samodzielnej analizy

background image

0111000,000

U2

 =2

0000U2

  011100,000

U2

 =2

0001U2

 - przesuwamy cyfry mantysy 

w prawo, zwiększamy wykładnik

    01110,000

U2

 =2

0010U2

      0111,000

U2

 =2

0011U2

        011,100

U2

 =2

0100U2

          01,110

U2

 =2

0101U2

            0,111

U2

 =2

0110U2

 - kończymy, mantysa jest 

znormalizowana

Otrzymujemy więc:

e = 0110  = 6

D

m = 0,111 = 7/8, sprawdzamy: 7/8 x 2

6

 = 448/8 = 

56

background image

Dla liczby 9

D

9

D

 = 1001

B

 = 01001

U2

01001,000

U2

 =2

0000U2

  0100,100

U2

 =2

0001U2

    010,010

U2

 =2

0010U2

      01,001

U2

 =2

0011U2

 - ostatnia jedynka zaraz zniknie!!! 

        0,100

U2

 =2

0100U2

 - koniec

Otrzymaliśmy wynik:

e = 0100  = 4

D

m = 0,100 = 1/2, sprawdzamy: 1/2 * 2

4

 = 16/2 = 8

9

D

 =? 01000100

ZP

background image

System 

zmiennoprzecinkowy

• Metoda: 

• Kodowanie w systemie zmiennoprzecinkowym zwanym też 

• cecha-mantysa

 umożliwia zapis liczb rzeczywistych z ustalonym błędem 

względnym

 system oparty na podziale liczby na cześć ułamkową zwaną 

mantysą oraz na wykładnik potęgi podstawy systemu zwany 

cechą

 opracowany na podstawie zapisu liczby w systemie 

pozycyjnym wagowym

background image

• Zmiennoprzecinkowa (

Floating Point Notation

) reprezentacja 

liczby dziesiętnej:

• M – mantysa, liczba ułamkowa ze znakiem, przedstawiona w jednym 

z trzech kodów ZMZU1, ZU2,

• W – wykładnik lub cecha, liczba całkowita ze znakiem przedstawiona 

również w jednym z trzech kodów (nie koniecznie tym samym co M),

• p – wspólna podstawa kodów zastosowanych do zapisu słów M i W,

• d – liczba naturalna (zwykle równa 1).

Reprezentacja 

zmiennoprzecinkowa

 

 

dL W

L L M W

L M

p

o

background image

• Liczba zmiennoprzecinkowa jest znormalizowana, jeśli 

mantysa 

spełnia warunek:

• Podczas czynności normalizacji następuje odpowiednie 

przesunięcie pozycji kropki dziesiętnej („przecinka”), co 
uzasadnia nazwanie tej notacji zmiennoprzecinkową.

• W przypadku liczb dwójkowych odbywa się to poprzez 

przesunięcie cyfr znaczących w prawo lub w lewo, w zależności 
od tego czy przecinek należy przesunąć w kierunku liczb małych, 
czy też dużych.

Normalizacja liczby 

zmiennoprzecinkowej

 

1

d

p

L M

background image

Liczby zmiennoprzecinkowe 

w praktyce

Metodyka dostosowywania liczby zmiennoprzecinkowej:

Przykład: Przyjęto jednobajtowe słowo dwójkowe M i W w kodzie 
ZU2. Zadanie: Przedstawienie liczby dziesiętnej = -4.25 w 
dwójkowym zapisie zmiennoprzecinkowym, znormalizowanym.

1.

Przekształcenie liczby L na liczbę dwójkową w kodzie ZU2:

2.

Normalizacja poprzez przesunięcie przecinka dziesiętnego 
(warunek – poprzedni slajd):

3.

Stosując 8-bitowy kod ZU2 dla słów mantysy i wykładnika 

otrzymujemy dwójkowy zapis zmiennoprzecinkowy:

4.

Sprawdzenie:

 

2

1.011.11

ZU L 

3

1.01111 2

L L

1.01111000.0000011

M

W

M W 

o

1 4 2 43 1 4 2 43

 

 

1

5

3

3

2

2

2

0.53125 2

4.25

L W

L M

p



 

 

W

ir

tu

a

ln

e

 

k

ro

p

k

i

background image

Standard IEEE 754

Pojedyncza precyzja:
mantysa 23 bity, wykładnik 8 bitów (nadmiar 127), znak 
bit

Mantysa jest znormalizowana do zmniejszonej podstawy 
wykładnika (kodowanie w formacie U1)

S E E E E E E E E MMMMMMMMMMMMMMMMMMMMMMM

Wykładnik

Mantysa

Z

n

a

k

Wartość:     1/4     1/16    1/64  itd.                                                                   
    1/2

23

               1/2     1/8      1/32   itd..

0

22

23

31

bit

bajt 1

bajt 2

bajt 3

bajt 4

background image

Standard IEEE 754

Procedura zapisu:

1) Określamy znak: Bit31= 1 jeżeli 

liczba

 ujemna, 0 jeżeli dodatnia

2) Szukamy największej liczby postaci 2

w

 mniejszej niż 

liczba

3) Zapisujemy wykładnik = w + nadmiar
4) Dzielimy 

liczbę

 przez 2

w

 (wynik będzie miał postać 1.xxxx)

5) Odejmujemy 1 i szukamy mantysy
6) Zaznaczamy bit jako 1 jeżeli po odjęciu 1/(2

(23-bit)

) (dla 

pojedynczej precyzji) mamy wartość nieujemną. Jeżeli 
otrzymamy wartość ujemną, zaznaczamy bit jako 0 i ignorujemy 
tę operację. Procedurę powtarzamy aż w wyniku odejmowania 
otrzymamy 0 lub dojdziemy do bitu nr 0.

Jedynka 
wiodąca

Konwerter z liczby dziesiętnej na dwójkową w standardzie
 IEEE 754

background image

Standard IEEE 754

Przykład: (

zapisujemy liczbę 14.5

)

(nadmiar 

127)

1) Liczba jest dodatnia  Bit31 = 0
2) Największa liczba 2

w

 mniejsza niż 14.5 to 2

3

 = 8  w = 3

3) Zapisujemy wykładnik = 127 + w = 130  10000010
4) 14.5/2

3

 = 1.8125

5) odejmujemy 1 i otrzymujemy 0.8125

0.8125-1/2=0.3125 

bit22 = 1

0.3125-1/4=0.0625 

bit21 = 1

0.0625-1/8= -0.0625 

bit20 = 0 

ignorujemy operację

0.0625-1/16= 0.0 

bit19 = 1

Pozostałe bity mantysy = 0

 

 

 

010000010110100000000000000
00000

znak

wykładni
k

mantysa

background image

Standard IEEE 754

Pojedyncza precyzja

: mantysa 23 bity, wykładnik 8 

bitów, znak 1 bit, nadmiar 2

8

/2 - 1 = 127

Podwójna precyzja

: mantysa 52 bity, wykładnik 11 

bitów, znak 1 bit, nadmiar 2

11

/2 - 1 = 1023

Rozszerzona podwójna precyzja

: mantysa 64 bity, 

wykładnik 15 bitów (nadmiar 2

64

/2 - 1 = 16383), znak 1 bit

background image

Standard IEEE 754

• Precyzja jest określana przez liczbę miejsc po przecinku, czyli 

jest określana przez mantysę.

• Najmniejsza wartość możliwa do zapisania w mantysie

• Pojedyncza precyzja:

• Mantysa ma 23 bity 1/2

23

 ≈ 1.2* 10

-7

  7 cyfr po przecinku

• Podwójna precyzja

• Mantysa ma 52 bity 1/2

52

 ≈ 2.2* 10

-16

  15-16 cyfr po 

przecinku

• Rozszerzona podwójna precyzja

• Mantysa ma 64 bity 1/2

64

 ≈ 5.4* 10

-20

  19 cyfr po przecinku

background image

Znaki i teksty

 Teksty składają się ze znaków
 Podstawą zapisu jest jeden bajt
 1 bajt przyjmuje 256 różnych wartości
 Ważną cechą kodowania jest jednoznaczność:

przyjęcie pewnego sposobu kodowania powinno być powszechne:
ASCII: 0 – 127  standardowe, 128 – 256  zależne od kraju

Znaki specjalne

0-31

Spacja

32

Cyfry

48 – 57

Wielkie litery

65 – 90

Małe litery

97 - 122

Pozostałe kody:
Kropka, przecinek, 
itd…

33-47, 58-64, 91-
96, 123-127

Np.

Litera W: 01010111 
kod binarny 87

Kod 
znaku

Znak

ASCII (American Standard Code for 
Information Interchange
)

W

87

background image

Kody UNICODE

• 256 znaków alfanumerycznych jakie można 

zakodować za pomocą rozszerzonego kodu ASCII nie 
dawało możliwości zakodowania znaków 
diakrytycznych wielu języków np. polskiego.

• Odpowiedzią jest kod nazwany 

UNICODE

 o długości 

16 bitów dla każdego znaku. Daje to możliwość 
zakodowania 2

16

, czyli 65536 znaków.


Document Outline