Przykład obwodu kombinacyjnego Przykład obwodu sekwencyjnego
Właściwości powyższego obwodu sekwencyjnego. Jeżeli w chwili początkowej wejście A i wyjście Q znajdą się w stanie 0 to wyjście Q pozostanie zawsze w stanie 0. Jednakże, jeżeli wejściu A znajdzie się sygnał 1 to pozostanie w nim na zawsze, niezależnie od późniejszych zmian wartości wejścia A. Wtedy stan logiczny wyjścia nie zależy od stanu wejścia A. Obwód możemy traktować jako komórkę pamięci, przechowującą wartość logiczną 1. Obwody sekwencyjne są najważniejszymi elementami budowlanymi systemów cyfrowych.
Obwody zintegrowane (scalone)
Technologia półprzewodnikowa umożliwia tworzenie olbrzymiej ilości gęsto upakowanych bramek logicznych połączonych w zadany sposób, jest to tak zwana kość (chip) . Na zewnątrz kości wyprowadzone są wejścia i wyjścia, tzw. piny. Liczba pinów waha się od kilkunastu na małych kościach do kilku milionów na dużych kościach. Aby poprawnie posługiwać się kośćmi niezbędne są katalogi informujące szczegółowo o strukturze logicznej konkretnego egzemplarza.
Obwody scalone klasyfikuje się zazwyczaj według ich złożoności, czyli liczby bramek, na cztery grupy:
Małej skali integracji (small scale integration - SSI) – zawierają kilka bramek
Średniej skali integracji (medium scale integration - MSI) – zawierają od 10 d0 1000 bramek. Różne ich struktury logiczne dostosowane są do wykonywania sprecyzowanych zadań, jako dekodery, sumatory, multiplexery, rejestry itp.
Dużej skali integracji (large scale integration - LSI) – jeden chip zawiera rzędu 104 bramek. Służą jako procesory, pamięci, programowalne urządzenia logiczne.
Bardzo dużej skali integracji (very large scale integration - VLSI) – jedna budowana współcześnie kość zawiera miliony bramek. Służą jako procesory mikrokomputerów, szeregów komórek pamięci. Dzięki niskiej cenie zdominowały rynek procesorów dla mikrokomputerów.
Reprezentacja danych
Komputery służą do przetwarzania informacji. Informacja jest wielkością mierzalną, potrzebna jest więc miara ilości informacji. Najmniejszą jednostką informacji jest bit (bit), informuje o tym, w którym z dwóch wykluczających się stanów znajduje się układ. Reprezentacja bitu może mieć różną postać: tak/nie, yes/no, on/off, 5V/0.1V, 1/0. Większą jednostką jest bajt (byte), jest to grupa 8 bitów.
bajt |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
Przykład zawartości 8-miu bitów bajtu
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
Inaczej mówiąc za pomocą bajtów można ponumerować 256 stanów, symboli lub innych rzeczy. Jeszcze większą jednostką jest słowo (word), jest to liczba bitów, które może przetworzyć komputer jednorazowo (w jednym kroku). Długością słowa określa się między innymi wydajność obliczeniową procesorów (np. procesory 32 lub 64 bitowe).
Systemy liczbowe stosowane w informatyce
Dane w komputerze są reprezentowane przez liczby. Liczby są zapisywane za pomocą ciągu symboli ze zbioru zwanego alfabetem. Systemy liczbowe różnią się alfabetem. Powszechnie używany system dziesiętny korzysta z dziesięcioznakowego alfabetu zwanego cyframi (0,1,2,3,4,5,6,7,8,9). Łatwiej jest podać wartość ilościową jakiejś cechy określeniem ‘mało’ lub ‘dużo’ niż ‘4’ lub ‘5’ (aki kłopot pojawia się czasem przy ocenianiu wypracowań egzaminacyjnych studentów). Dlatego technologie cyfrowe wolą używać alfabetu o dwóch (21) symbolach (0,1). System dwójkowy (Binary Code Decimal) ma pewną wadę, liczba znaków konieczna do zapisania liczby jest wielokrotnie większa niż liczba znaków systemu dziesiętnego. Aby zapis liczby uczynić bardziej czytelnym często używa się systemów opartych na alfabetach liczących więcej niż pierwsza potęga liczby 2. Są to systemy ósemkowy (oktalny, 23 znaków) i system szesnastkowy (hexadecymalny, 24 znaków). Tabela podaje zapis początkowych 17 liczb w czterech wymienionych systemach liczbowych.
dziesiętny |
dwójkowy |
ósemkowy |
szesnastkowy |
liczba10 |
liczba2 |
liczba8 |
liczba16 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
2 |
10 |
2 |
2 |
3 |
11 |
3 |
3 |
4 |
100 |
4 |
4 |
5 |
101 |
5 |
5 |
6 |
110 |
6 |
6 |
7 |
111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
16 |
10000 |
20 |
10 |
Oznaczymy przez b długość alfabetu systemu liczbowego, na przykład, b=10 w systemie dziesiętnym, b=16 w systemie szesnastkowym. Dowolną liczbę naturalną można wtedy przedstawić w postaci
.
Ściśle
rzecz biorąc lewa strona wzoru jest również zapisana w jakimś
systemie liczbowym, zazwyczaj jest to system dziesiętny, czyli
.W
przyszłości brak wskazania systemu liczbowego oznaczać będzie
system dziesiętny. Inaczej mówiąc
wzór powyższy dokonuje konwersji reprezentacji (sposobu
przedstawienia, zapisania) liczby z systemu o podstawie b
(o alfabecie o długości b)
do systemu dziesiętnego.
Przykłady:
i.
N10
= 12310,
.
,
,
,
,
ii.
N8
= 75018,
.
,
,
,
=3905,
iii.
N16
= 1F216,
Konieczna jest również umiejętność przeprowadzania konwersji liczby naturalnej N z jednego systemu na innego, na przykład z dziesiętnego na dwójkowy. Oznaczymy przez Nb liczbę zapisaną w systemie o podstawie b. Jedna z metod polega na dzieleniu kolejnych wyników dzielenia przez b i rejestrowania reszt z tego dzielenia. Zbiór reszt jest liczbą w reprezentacji b.
Przykład
Liczba N = dziewięćdziesiąt dziewięć w postaci dziesiętnej to N10 = 99, poszukujemy jej postaci w systemie dwójkowym.
Kolejne kroki (dzielenia):
99 / 2 = 49, reszta 1--> 1
49 / 2 = 24, reszta 1 -->11
24 / 2 = 12, reszta 0 -->011
12 / 2 = 6, reszta 0 -->0011
6/ 2 = 3, reszta 0 --> 00011
3 / 2 = 1, reszta 1 --> 100011
1 / 2 = 0, reszta 1 --> 1100011
Wobec tego 9910 = 11000112.
Ogólny algorytm jest następujący:
- dzielimy liczbę Nb przez b, resztę z dzielenia zapisujemy jako pierwszy od lewej znak liczby w systemie o
podstawie b
- wynik dzielenia dzielimy przez b, resztę zapisujemy jak wyżej
- kontynuujemy do chwili gdy wynik dzielenia jest równy zeru.
Konwersja liczby naturalnej z jednego systemu o podstawie 2n, na dwójkowy (o podstawie 21) i na odwrót jest prostsza. Praktyczne znaczenie mają przypadki n = 3 i n = 4.
Konwersja z systemu ósemkowego na dwójkowy N8--> N2. Wystarczy dokonać konwersji kolejnych znaków liczby zapisanej w systemie ósemkowym na system dwójkowy (będą to trójki znaków 0 lub 1) i zapisać te trójki w tej samej kolejności w jakiej występowały w N8
Przykład: N8 = 341, N2 = 011 100 001 = 11100001. Sprawdzenie: 3418 = 1*80 + 4*81 + 3*82 = 22510, 111000012 = 1*20 + 1*25 + 1*26 + 1*27 = 22510.
Konwersja z systemu szesnastkowego na dwójkowy N16 --> N2. Wystarczy dokonać konwersji kolejnych znaków liczby zapisanej w systemie ósemkowym na system dwójkowy (będą to czwórki znaków 0 lub 1) i zapisać te czwórki w tej samej kolejności w jakiej znaki występowały w N8
Przykład: N16 = 2B916 , N2 = 0010 1011 1001 = 1010111001. Sprawdzenie: 2B916 = 9*160 + 11*161 + 2*162 = 69710, 10101110012 = 1*20 + 1*23 + 1*24 + 1*25 + 1*27 + 1*29 = 69710.
Konwersja z postaci dwójkowej na postać ósemkową lub szesnastkową jest równie prosta. Znaki liczby w postaci dwójkowej trzeba pogrupować, zaczynając od prawej na grupy po trzy lub cztery znaki. Każdą grupę trzech znaków zamienić na odpowiedni symbol systemu ósemkowego, podobnie grupy czterech znaków należy zamienić na odpowiedni symbol systemu szesnastkowego.
Przykłady:
i. 10011010112 = 1 001 101 011 = 11538. Sprawdzenie: 10011010112 = 1+2+23+25+26+29=61910,
11938=3+5*8+1*16+1*512=61910.
ii. 10011010112 = 10 0110 1011 = 26B16. Sprawdzenie: 10011010112 = 1+2+23+25+26+29=619,
26B16=11+6*16+2*162=61910.
Arytmetyka binarna
Procesory są zbudowane z bramek, które są strukturami logicznymi a więc przetwarzają liczby binarne. Przetwarzanie oznacza między innymi dodawanie liczb, mnożenie i inne operacje arytmetyczne. Należy rozróżniać operacje na zmiennych logicznych od operacji na liczbach binarnych. Oczywiście przeciętny użytkownik komputera nie musi wiedzieć jak komputer dodaje liczby binarne, ale informatyk powinien. Zasada jest taka sama jak w przypadku liczb dziesiętnych i nieco podobna jak w przypadku zmiennych logicznych. Oto tablice
nazwa |
działanie |
wynik |
przeniesienie |
dodawanie |
0+0 0 + 1 1 + 0 1 + 1 |
0 1 1 0 |
0 0 0 1 |
odejmowanie |
0-0 0 - 1 1 - 0 1 - 1 |
0 1 1 0 |
0 1 0 0 |
mnożenie |
0 • 0 0 • 1 1 • 0 1 • 1 |
0 0 0 1 |
0 0 0 0 |
Kolumna 'przeniesienie' (angielskie ‘carry’) podaje liczby, które należy dodać (przy dodawaniu) lub odjąć (przy odejmowaniu) do/od bitu leżącego bardziej na lewo.
Przykłady:
i. dodawanie sprawdzanie
11101 --> 29
1101 --> 13
--------- ---
101010 --> 42
ii. odejmowanie sprawdzanie
11101 --> 29
1101 --> 13
--------- ---
10000 --> 16
ii. mnożenie sprawdzanie
11101 --> 29
1101 --> 13
--------- ---
11101 87
111010 29
11101 -----
11101 377
--------------
101111001 -->377
Dzielenie jest bardziej skomplikowane, wrócimy do niego później
Sumatory
Jaka powinna być struktura logiczna i realizacja fizyczna układu wykonującego dodawanie? Ponieważ dodawanie odbywa się niezależnie na każdym bicie, więc wystarczy zbudować jednobitowy sumator a następnie utworzyć łańcuch (kaskadę) tylu jednobitowych sumatorów ilu bitowe jest słowo. Poniżej znajduje się symbol i tabela pokazująca wynik dodawania dwóch jednobitowych liczb z możliwością dodatkowego wejścia przeniesienia (Carry in = z) z dodawania bitu młodszego i wyjścia przeniesienia (Carry out) do bitu starszego. Kolumna S podaje tabelę wejść i wyjść sumatora jednobitowego.
x |
y |
z |
Cout |
S |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
0 |
1 |
1 |
0 |
0 |
1 |
1 |
1 |
0 |
1 |
1 |
1 |
1 |
1 |
Graficzna reprezentacja sumatora jednobitowego Tabela wartości sumatora jednobitowego
Po pierwsze widać, że sumator nie jest żadną z bramek logicznych gdyż ma dwa wyjścia. Przyjrzymy się ostatniemu wierszowi tabeli. Wartości obydwu dodawanych liczb wynoszą 1, również przeniesienie z dodawania młodszych bitów jest równe 1. Wynik sumowania wynosi 11 (310). Wobec tego wynik sumowania w tym bicie wynosi 1, a liczba 102 (210) wchodzi do z starszego bitu. Taki jednobitowy sumator nosi nazwę pełnego sumatora (full adder).Jego zaletą jest prostota i łatwość rozszerzenia na dowolną liczbę bitów. Natomiast wadą powolność, spowodowana koniecznością dokonywania wielu przeniesień, np. jeżeli najniższy bit obydwu liczb ma wartość 1 to wartość przeniesienia też jest równa 1. Wówczas liczba przeniesień może się równać długości słowa (np. 64 w procesorze 64 bitowym). Wymyślono wiele konstrukcji sumatorów wymagających mniejszej liczby przeniesień.
Konstrukcja
logiczna sumatora polega na znalezieniu dwóch funkcji logicznych
trzech zmiennych (x,y,z), jedna funkcja podaje wartość sumy
druga wartość przeniesienia. Wykorzystamy
opisane wcześniej zasady budowania funkcji logicznych wielu
zmiennych oraz powyższą tabelę. S
można przedstawić jako sumę
mintermów
a następnie przekształcić
.
Suma ma wartość 1 gdy
zbiór zmiennych zawiera nieparzystą liczbę jedynek, taką
właściwość ma bramka XOR. Wobec tego
.
Natomiast wychodzące przeniesienie pojawia się w czterech przypadkach, suma odpowiednich mintermów
.
Drugi i trzeci wyraz wynikają z wierszy 6 i 7 tabeli, a w nich
i odpowiednio
mają wartość 1. Wobec tego
.
Ostatecznie sumator jednobitowy definiują następujące dwie funkcje
,
.
Zatem sumę realizują dwie szeregowo połączone bramki XOR, a wychodzące przeniesienie realizują trzy równoległe bramki AND, których wyjścia sumuje bramka OR
Struktura logiczna jednobitowego sumatora: po lewej sumy, po prawej przeniesienia
Czterobitowy sumator
bit |
nr.bitu |
x |
y |
Cin |
S |
Cout |
najmniej znaczący |
0 |
0 |
1 |
0 |
1 |
0 |
|
1 |
1 |
1 |
0 |
0 |
1 |
|
2 |
1 |
0 |
1 |
0 |
1 |
najbardziej znaczący |
3 |
0 |
0 |
1 |
1 |
0 |
bit |
najbardziej znaczący |
|
|
najmniej znaczący |
Cin |
0 |
0 |
0 |
0 |
x |
0 |
1 |
1 |
0 |
y |
0 |
0 |
1 |
1 |
S |
1 |
0 |
0 |
1 |
Cout |
0 |
1 |
1 |
0 |
Tabele wartości operandów, sumy i przeniesień
Sumator wykonuje dodawanie dwóch liczb czterobitowych
Reprezentacja liczb ujemnych
Liczbę binarną, ujemną bardzo łatwo napisać na papierze, na przykład ‘-11101’, trudniej przedstawić w postaci zrozumiałej dla komputera. Wydaje się, że najprościej byłoby dodać jeden bit do binarnego zapisu liczby. Wartość tego dodatkowego bitu umieszczonego na lewo od najbardziej znaczącego bitu liczby naturalnej informowałaby o znaku liczby, na przykład 0 oznaczałoby liczbę dodatnią a 1 liczbę ujemną.
Przykład konsekwencji takiej propozycji:
Dodawanie dwóch liczb jednej dodatniej drugiej ujemnej
01010012 = 4110> 0, 11110012 = -5710< 0.
Obliczymy sumę tych liczb 01010012 + 11110012 = 1 11000102 = -22610.Tymczasem poprawny wynik to 41 - 57 = -1610.
Wobec tego propozycja prowadzi do błędnych wyników, trzeba ją odrzucić.
Liczby całkowite ze znakiem
Istnieje kilka innych sposobów reprezentacji ujemnych liczb całkowitych pozbawionych powyższego kłopotu. Sposoby te bywają przydatne w szczególnych przypadkach. Najczęściej stosowany jest następujący sposób. Do bitów liczby dodajemy bit znaku na lewo od najbardziej znaczącego bitu.
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0/1 bit znaku |
bitn-2 |
bitn-3 |
|
|
|
|
|
|
|
|
|
|
|
bit1 |
bit0 |
Dodatnią liczbę tworzymy jak powyżej, to znaczy przypisujemy bitowi znaku wartość 0. Natomiast liczbę ujemną tworzymy przez zaprzeczenie wszystkich bitów liczby dodatniej (łącznie z bitem znaku) i do wyniku dodajemy liczbę 1. Taka reprezentacja nazywa się kod uzupełnienia dwójkowego (negacja bitów i dodanie 1) (two's complement).
Przykłady
+x2 |
+x10 |
- x2 |
- x10 |
0 1001 |
9 |
1 0110+1=1 0111 |
-9 |
0 0001 |
1 |
1 1110+1=11111 |
-3 |
0 0000 |
0 |
1 1111+1=1 0000 |
0 |
0 1111 |
15 |
1 0000+1=1 0001 |
-15 |
1 0011 |
-13 |
|
13 |
|
-10 |
|
10 |
Liczba ujemna –x jest poprawnie zdefiniowana jeżeli spełniona jest tożsamość x + (– x) = 0. Sprawdzamy na przykładach.
Przykład 1
Liczba 8 bitowa |x| = 11001101, liczba dodatnia x =110101101, liczba ujemna -x = 00110010+1=00110011.
Sprawdzenie: x - x = 0101101+0110011 = 00000000.
Przykład 2
|x| = 11100011, |y| = 00110001, zaleźć różnicę x - y.
Liczba x = 011100011, liczba y = 000110001, liczba – y = 111001111. Wobec tego
x-y = x + (- y) = 0011100011 + 111001111 = 010110010 → 17810.
x - y = 11100011 - 00110001 = 10110010 = 17810
Sprawdzenie: x10 = 227, y10 = 49, : x10 - y10 = 178. Odejmowanie zostało wykonane poprawnie.
Reprezentacja ułamków dziesiętnych
Dane wprowadzane do komputera oraz wyniki mają między innymi postać liczb naturalnych, całkowitych (dodatnich i ujemnych), ułamkowych i innych. Kolej na reprezentację ułamków dziesiętnych.
Najczęściej użyciu są dwie reprezentacje ułamków dziesiętnych:
- stałoprzecinkowa tzn. o stałej liczbie miejsc po przecinku (fixed point representation)
- zmiennoprzecinkowa tzn. o zmiennej liczbie miejsc po przecinku (floating point representation).
Reprezentacja o stałej liczbie miejsc po przecinku
W niektórych zastosowaniach komputerów wystarcza posługiwanie się ułamkami dziesiętnymi o zadanej, ustalonej liczbie cyfr po przecinku (ustalonej dokładności). Wówczas wygodnie jest rozszerzyć reprezentację dwójkową liczb całkowitych o dodatkowe pola reprezentujące część ułamkową. Ułamek dziesiętny zapiszemy w postaci: część całkowita, część ułamkowa. Wówczas reprezentacja dziesiętna tych składników jest następująca
.
Ich suma daje wartość ułamka dziesiętnego część całkowita + część ułamkowa.
Na przykład dla liczby 321.74, liczby n = 3, m = 2, a powyższe wyrażenie ma postać
.
Zaletą reprezentacji stałoprzecinkowej jest oszczędne gospodarowanie zasobami pamięci i szybsze wykonywanie obliczeń. Reprezentacja stałoprzecinkowa jest prawdopodobnie stosowana w wyspecjalizowanych aplikacjach obsługujących banki, gdyż nie ma sensu dzielić 1 grosza na dowolnie małe części. Wadą jej jest ograniczona dokładność obliczeń.
Konwersja ułamka
dziesiętnego
o części całkowitej x, ułamkowej y, na
liczbę w systemie dwójkowym przebiega zgodnie z wzorem
To znaczy dla części całkowitej x.0 przebiega tak samo jak liczby całkowitej (postać binarną stanowią reszty z dzielenia przez 2). Część reprezentująca ułamek dziesiętny powstaje przez kolejne mnożenia części ułamkowej przez 2. Wynika to z następującego rozumowania. Część ułamkowa liczby 0.y ma w zapisie dwójkowym postać
.
Jeżeli pomnożymy
obydwie strony równania przez 2 to otrzymamy
.
Część całkowitą lewej strony
usuwamy z równania i umieszczamy w najmniej znaczącym bicie
dwójkowej reprezentacji części ułamkowej. Pozostałe równanie
mnożymy przez 2, tym razem część całkowita lewej strony jest
równa
robimy z nią to samo co powyżej. Kontynuujemy postępowanie dopóki
lewa strona jest różna od zera lub gdy wypełnimy wszystkie bity
przeznaczone na część ułamkową.
Przykład
Zaleźć postać dwójkową liczby x = 0,431.
|
|
Część całkowita iloczynu |
Postać dwójkowa |
0.431 |
|
|
0. |
2*0.431 |
0.861 |
0 |
0.0 |
2*0.861 |
1.722 |
1 |
0.01 |
2*0.722 |
1.422 |
1 |
0.011 |
2*0.422 |
0.844 |
0 |
0.0110 |
2*0.844 |
1.688 |
1 |
0.01101 |
2*0.688 |
1.376 |
1 |
0.01101 |
2*0.376 |
0.752 |
0 |
0.011010 |
2*0.752 |
1.504 |
1 |
0.0110101 |
2*0.504 |
1.008 |
1 |
0.01101011. . . |
Wobec tego 0.43110 = 0.01101. . . 2, widać, że postać część ułamkowej w systemie binarnym może być ciągiem nieograniczonym. Wówczas ciąg trzeba ograniczyć tak aby ilość znaków liczby binarnej nie przekroczyła założonej długości słowa.
Przykład
Znaleźć postać binarną liczby 41.431 z dokładnością do 0.0110.
41 → 101001,
0,431 → 0.0110111001(=0.430664062510)
Wobec tego 41,43110 = 101001.01101110012.
Liczby ułamkowe dziesiętne ze znakiem konwertuje się na liczby binarne następująco: część całkowitą konwertuje się tak samo jak liczby całkowite ze znakiem, część ułamkowa liczby ujemnej jest taka sama jak liczby dodatniej.
Zmiennoprzecinkowa reprezentacja ułamków dziesiętnych (Floating point representation)
Stałoprzecinkowa reprezentacja sprawia kłopot w utrzymaniu dokładności rachunków gdy w ich trakcie pojawiają się liczby znacznie różniące się wielkością, na przykład 105 i 10-5.Wówczas zakres wielkości liczb może być nieodpowiedni w obliczeniach inżynierskich czy też naukowych, może prowadzić do dużych błędów. W celu ominięcie tych trudności wymyślono bardziej skomplikowaną reprezentację. Trzeba przyjąć określoną liczbę bitów do reprezentowania liczby znaczących cyfr liczby, czyli dokładności. Pozostałe bity wykorzystuje się do skalowania liczby, to znaczy zapisania jej wielkości. Na przykład, jeżeli uznamy, że wymagana dokładność to 5 cyfr (łącznie, to znaczy przed i po przecinku) to skalowanie informuje czy to jest liczba 5.4378*104 czy też 5.4378*10-4. Bity przeznaczone na zapisanie liczby są podzielone na trzy grupy.
-
znak mantysy (z)
moduł mantysy (m)
Cecha (c)
Najbardziej znaczący bit przechowuje znak liczby, druga grupa o nazwie moduł mantysy (w skrócie mantysa)zajmuje najwięcej bitów i służy do zapisania znaczących cyfr (odpowiada za dokładność liczby), trzecia o nazwie cecha (lub exponenta) zawiera informację o wielkości liczby. Reprezentacja zmiennoprzecinkowa jest równoważna stosowanemu często w obliczeniach inżynierskich lub naukowych zapisowi liczby w postaci funkcji
,
na przykład -0.32*106, lub w systemie dwójkowym 01011*21101. Mantysa ma format liczby stałoprzecinkowej, cecha liczby całkowitej. Tą samą liczbę można w reprezentacji zmiennoprzecinkowej zapisać na kilka sposobów, na przykład
-0.32*106 = -3.2*105 = -32*104 = -0.032*107.
Widać, że kropka przesuwa się w lewo (lub w prawo) z jednoczesnym zmniejszaniem (lub wzrostem) wartość cechy bez zmiany wartości liczby. Przecinek w mantysie m może więc płynąć (float) dostosowując się do postaci modułu cechy.
Cecha c może mieć wartość dodatnią lub ujemną. Aby uniknąć niewygodnej operacji porównywania wykładników o różnych znakach stosuje się konwersję wszystkich wykładników do postaci liczb dodatnich całkowitych. W tym celu dodaje się dodatnią liczbę do każdego wykładnika, w ten sposób powstaje cecha spolaryzowana (biased exponent). Wspomniana liczba zależy od liczby bitów przeznaczonych na zapis cechy. Po wykonaniu obliczeń liczba ta jest odejmowana od cechy wyniku.
Standard IEEE 754
Jest to powszechnie stosowany standard reprezentacji zmiennoprzecinkowej w dwóch wersjach pojedynczej (na 32 bitach) i podwójnej precyzji (na 64 bitach). W tym standardzie umieszczono cechę na lewo od mantysy. Ułatwia to sortowanie liczb zmiennoprzecinkowych, gdyż przy określonym znaku, liczby z większą cechą mają większą wartość niż liczby z mniejszą cechą. W przypadku pojedynczej precyzji mantysa ma długość 23 bity, cecha - 8 bitów, polaryzacja wynosi 2q-1- 1 = 127.
-
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
z
c
m
W postaci standaryzowanej format liczby pojedynczej precyzji to (-1)z(1 + mantysa) 2(cecha+polaryzacja). Bity mantysy reprezentują liczbę z przedziału [0,1). W przypadku podwójnej precyzji odpowiednie liczby to mantysa 52 bity, i cecha 11 bitów a polaryzacja wynosi 210-1 = 1023.
Przykład
Postać liczby -0.051 w standardzie IEEE 754 w formacie pojedynczej precyzji.
Wpierw należy przekształcić liczbę do postaci znormalizowanej, to znaczy -0.051 = -0.51*10-1. Następnie znajdujemy wartość bitów wszystkich trzech grup.
Bit znaku --> 1.
Bity cechy, cecha = -1, dokonujemy polaryzacji, cecha → -1 + 127 = 12610 = 10 000 0002.
Bity mantysy, kolejne kroki wyliczania bitów mantysy podaje tabela
wartości kolejnych bitów |
0.51 |
wartość postaci dwójkowej liczby w kolumnie1 |
1 |
0.0200000000 |
0.5000000000 |
0 |
0.0400000000 |
0.0000000000 |
0 |
0.0800000000 |
0.0000000000 |
0 |
0.1600000000 |
0.0000000000 |
0 |
0.3200000000 |
0.0000000000 |
0 |
0.6400000000 |
0.0000000000 |
1 |
0.2800000000 |
0.0078125000 |
0 |
0.5600000000 |
0.0000000000 |
1 |
0.1200000000 |
0.0019531250 |
0 |
0.2400000000 |
0.0000000000 |
0 |
0.4800000000 |
0.0000000000 |
0 |
0.9600000000 |
0.0000000000 |
1 |
0.9200000000 |
0.0001220703 |
1 |
0.8400000000 |
0.0000610352 |
1 |
0.6800000000 |
0.0000305176 |
1 |
0.3600000000 |
0.0000152588 |
0 |
0.7200000000 |
0.0000000000 |
1 |
0.4400000000 |
0.0000038147 |
0 |
0.8800000000 |
0.0000000000 |
1 |
0.7600000000 |
0.0000009537 |
1 |
0.5200000000 |
0.0000004768 |
1 |
0.0400000000 |
0.0000002384 |
|
suma |
0.5099999905 |
Wobec tego bity mantysy liczby0.5110 to 1 000 001 000 111 101 010 111. Ostatecznie wartości wszystkich bitów liczby 0.5110w standardzie IEEE 754zawiera poniższa tabela.
-
31
30
29
28
27
26
25
24
23
22
21
20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
1
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
1
0
0
0
1
1
1
1
0
1
0
1
1
1
1
Konwersja tej liczby na system dziesiętny pokazuje, że jest to wartość przybliżona równa 0.5099999905.
Działania arytmetyczne na liczbach w systemie dwójkowym w formacie zmiennoprzecinkowym nazywa się arytmetyką zmiennoprzecinkową. Darujemy sobie wnikanie w jej szczegóły. Obecnie wiele maszyn ma procesory wykonujące sprzętowo (nie programowo)działania arytmetyczne na liczbach w formacie zmiennoprzecinkowym.
Reprezentacja wielkości innych niż liczbowe
Istnieje wiele wielkości, które nie są liczbami, a którymi się posługujemy, które przetwarzamy i chcielibyśmy do tego wykorzystać komputer. Na przykład aby przygotować ten lub wybierać z niego pewne fragmenty w celu przygotowania ściągi. Każdy znak tekstu reprezentuje literę (ich zbiór tworzy alfabet) lub cyfrę lub inne znaki pisarskie i sterujące(LF, CR). Ciąg znaków tworzy słowo, ciąg słów zdanie itd. Jedną z najstarszych i powszechnie używanych reprezentacji tego typu znaków jest ASCII (American Standard Code for Information Interchange). Jest to reprezentacja 7 – bitowa (128 różnych konfiguracji bitów) znaków pisarskich (oraz pewnej liczby poleceń). Rozszerzona 8 bitowa wersja standardu ASCII jest nadal używana jako podstawowa w urządzeniach pracujących pod systemami operacyjnymi Microsoft Windows, Mac OS X, i Linux.
kod |
znak |
kod |
znak |
kod |
znak |
kod |
znak |
kod |
znak |
kod |
znak |
32 |
space |
48 |
0 |
64 |
@ |
80 |
P |
96 |
` |
112 |
p |
33 |
! |
49 |
1 |
65 |
A |
81 |
Q |
97 |
a |
113 |
q |
34 |
" |
50 |
2 |
66 |
B |
82 |
R |
98 |
b |
114 |
r |
35 |
# |
51 |
3 |
67 |
C |
83 |
S |
99 |
c |
115 |
s |
36 |
$ |
52 |
4 |
68 |
D |
84 |
T |
100 |
d |
116 |
t |
37 |
% |
53 |
5 |
69 |
E |
85 |
U |
101 |
e |
117 |
u |
38 |
& |
54 |
6 |
70 |
F |
86 |
V |
102 |
f |
118 |
v |
39 |
' |
55 |
7 |
71 |
G |
87 |
w |
103 |
g |
119 |
w |
40 |
( |
56 |
8 |
72 |
H |
88 |
X |
104 |
h |
120 |
x |
41 |
) |
57 |
9 |
73 |
I |
89 |
Y |
105 |
i |
121 |
y |
42 |
* |
58 |
: |
74 |
J |
90 |
Z |
106 |
j |
122 |
z |
43 |
+ |
59 |
; |
75 |
K |
91 |
[ |
107 |
k |
123 |
{ |
44 |
, |
60 |
< |
76 |
L |
92 |
\ |
108 |
l |
124 |
| |
45 |
- |
61 |
= |
77 |
M |
93 |
] |
109 |
m |
125 |
} |
46 |
. |
62 |
> |
78 |
N |
94 |
^ |
110 |
n |
126 |
~ |
47 |
/ |
63 |
? |
79 |
O |
95 |
_ |
111 |
o |
127 |
DEL |
