Pojęcia podstawowe 1/40

Podobne dokumenty
Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

Arytmetyka binarna - wykład 6

Technologie Informacyjne

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

Teoretyczne Podstawy Informatyki

Podstawy Informatyki

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Architektura komputerów

Naturalny kod binarny (NKB)

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Pracownia Komputerowa wykład VI

Techniki multimedialne

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

Stan wysoki (H) i stan niski (L)

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Architektura komputerów

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Podstawy Informatyki

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

Architektura komputerów

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Kodowanie informacji. Przygotował: Ryszard Kijanka

INFORMATYKA. Zajęcia organizacyjne. Arytmetyka komputerowa.

Struktura i działanie jednostki centralnej

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

Pracownia Komputerowa wykład IV

Wstęp do Informatyki

LICZBY ZMIENNOPRZECINKOWE

Kodowanie informacji. Kody liczbowe

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Kod IEEE754. IEEE754 (1985) - norma dotycząca zapisu binarnego liczb zmiennopozycyjnych (pojedynczej precyzji) Liczbę binarną o postaci

Pracownia Komputerowa wyk ad VI

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

Metoda znak-moduł (ZM)

Arytmetyka liczb binarnych

Kod U2 Opracował: Andrzej Nowak

1.1. Pozycyjne systemy liczbowe

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Wielkości liczbowe. Wykład z Podstaw Informatyki dla I roku BO. Piotr Mika

Logiczny model komputera i działanie procesora. Część 1.

Architektura komputerów

1259 (10) = 1 * * * * 100 = 1 * * * *1

Architektura komputerów wer. 7

algorytm przepis rozwiązania przedstawionego zadania komputer urządzenie, za pomocą którego wykonywane są algorytmy

Wstęp do informatyki- wykład 1 Systemy liczbowe

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

Wielkości liczbowe. Wykład z Podstaw Informatyki. Piotr Mika

Pozycyjny system liczbowy

Arytmetyka stałopozycyjna

Wstęp do Informatyki. Reprezentacja liczb w komputerze Arytmetyka stało- i zmiennoprzecinkowa Przechowywanie danych pliki i foldery

Zwykle liczby rzeczywiste przedstawia się w notacji naukowej :

Systemy liczenia. 333= 3*100+3*10+3*1

Architektura komputera. Dane i rozkazy przechowywane są w tej samej pamięci umożliwiającej zapis i odczyt

Technologie Informacyjne Wykład 4

PODSTAWY INFORMATYKI. Informatyka? - definicja

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

SYSTEMY LICZBOWE. SYSTEMY POZYCYJNE: dziesiętny (arabski): 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 rzymski: I, II, III, V, C, M

Reprezentacja stałoprzecinkowa. Reprezentacja zmiennoprzecinkowa zapis zmiennoprzecinkowy liczby rzeczywistej

Met Me ody numer yczne Wykład ykład Dr inż. Mic hał ha Łan Łan zon Instyt Ins ut Elektr Elektr echn iki echn i Elektrot Elektr echn olo echn

Wprowadzenie do informatyki - ć wiczenia

Systemy zapisu liczb.

L6.1 Systemy liczenia stosowane w informatyce

Pracownia Komputerowa wyk ad IV

DZIESIĘTNY SYSTEM LICZBOWY

Adam Korzeniewski p Katedra Systemów Multimedialnych

Zapis liczb binarnych ze znakiem

Wstęp do Informatyki. dr inż. Paweł Pełczyński

Arytmetyka komputera

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

Wykład I: Kodowanie liczb w systemach binarnych. Studia Podyplomowe INFORMATYKA Podstawy Informatyki

Adam Korzeniewski p Katedra Systemów Multimedialnych

Wstęp do informatyki. Pojęcie liczebności. Zapis liczb. Liczenie bez liczebników. Podstawy arytmetyki komputerowej. Cezary Bolek

Podstawy Informatyki. Wykład 2. Reprezentacja liczb w komputerze

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Cyfrowy zapis informacji

Procesor i jego architektura (CISC, RISC, 32/64 bity). Systemy wieloprocesorowe. wer Wojciech Myszka 16 pa«zdziernika 2008

Podstawy informatyki (2)

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

Cyfrowy zapis informacji. 5 grudnia 2013 Wojciech Kucewicz 2

Arytmetyka stało i zmiennoprzecinkowa

Operacje arytmetyczne

Architektura komputerów wer. 3

SYSTEMY LICZBOWE 275,538 =

Moduł 2 Zastosowanie systemów liczbowych w informacji cyfrowej

Prefiksy binarne. kibibit (Kibit) mebibit (Mibit) gibibit (Gibit) tebibit (Tibit) pebibit (Pibit) exbibit (Eibit) zebibit (Zibit) yobibit (Yibit)

Programowanie Niskopoziomowe

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 1 WSTĘP DO INFORMATYKI

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Transkrypt:

1/40 Pojęcia podstawowe Informatyka dziedzina wiedzy i działalności zajmująca się gromadzeniem, przetwarzaniem i wykorzystywaniem informacji z zastosowaniem środków technicznych (komputerów). Dane wartości określonego typu, opisujące wybrane własności obiektów lub procesów Informacje wyniki gromadzenia i przetwarzania danych, które prowadzą do rozszerzenia wiedzy posiadanej przez odbiorcę Wśród zagadnień składających się na dziedzinę informatyki można wyróżnić: sprzęt służący do obliczeń [1], [2] Literatura: J.Lobur L.Null. The essentials of computer organization and architecture. 3 Ed. Jones and Bartlett Publishers, 2010. W.Stallings. Organizacja i architektura systemu komputerowego. WNT, 2009. metody przetwarzania danych (algorytmy) implementacja tych metod (programowanie) W literaturze zachodniej na określenie tej dziedziny używa się często terminu Computer Science lub Information Technology.

2/40 Pojęcia podstawowe Informatyka jako dziedzina - definicja Computer Science Curricula 2013 Informatyka jest dziedziną nauki i techniki złożoną z czternastu obszarów wyodrębnionych w standardzie nauczania zwanym Computer Science Curricula 2013, opracowanym wspólnie przez IEEE Computer Society i ACM.

Pojęcia podstawowe Informatyka jako dziedzina - definicja Computer Science Curricula 2013 3/40

Przykładowe systemy Mikrokontrolery z rodziny Arduino 4/40

Przykładowe systemy Mini-komputery - Raspberry Pi i BeagleBone 5/40

Historia rozwoju Generacja zero: mechaniczne maszyny kalkulacyjne (1642 1945) Wilhelm Schickard (1592 1635) jest uważany za twórcę pierwszego mechanicznego kalkulatora, nazwanego Calculating Clock. Mógł on dodawać i odejmować liczby o maksymalnie 6 cyfrach. W 1642 r. Blaise Pascal (1623 1662) zbudował mechaniczny kalkulator nazwany Pascaline aby pomóc swemu ojcu w obliczeniach podatkowych. Pascaline mógł realizować dodawanie z przeniesieniem i odejmowanie. Gottfried Wilhelm von Leibniz (1646 1716), znany matematyk, wynalazł kalkulator o nazwie Stepped Reckoner, który mógł realizować dodawanie, odejmowanie, mnożenie i dzielenie. Charles Babbage (1791 1871) zbudował maszynę różnicową Difference Engine w 1822, która mechanizowała rozwiązywanie wielomianów i właściwie była kalkulatorem, nie komputerem. Babbage zaprojektował też w 1833 r. uniwersalną maszynę liczącą, nazwaną maszyną analityczną (Analytical Engine), która mogła realizować dowolne operacje matematyczne. Analytical Engine posiadała wiele cech wiązanych z nowoczesnymi komputerami: jednostkę arytmetyczno-logiczną do wykonywania obliczeń (Babbage nazywał ją młynem - mill), pamięć (store) i urządzenia wejścia-wyjścia. Babbage zaprojektował też możliwość warunkowego rozgałęzienia programu. Ada Lovelace, córka poety Lorda Byrona, zasugerowała aby Babbage napisał program (plan działania) dla tej maszyny w celu obliczeń liczbowych. Ten fakt jest pierwszym znanym przykładem programu komputerowego, a Ada jest uważana za pierwszego programistę komputerów. Babbage zaprojektował użycie kart perforowanych jako nośnika danych we/wy i programu. Użycie kart dla sterowania działaniem nie pochodziło od Babbage a, ale od Joseph-Marie Jacquard a (1752 1834), konstruktora maszyn tkackich. 6/40

7/40 Historia rozwoju Generacja 1: komputery lampowe (1945 1953) W latach 1930-tych, Konrad Zuse (1910 1995) kontynuując prace Babbage a, zastosował układy elektryczne do budowy urządzenia wg projektu Babbage a. Komputer Zuse go, nazwany Z1, był zbudowany na przekaźnikach elektromechanicznych zamiast ręcznie napędzanych tarcz stosowanych przez Babbage a. Komputer Z1 był programowalny i posiadał pamięć, jednostkę arytmetyczną i jednostkę sterującą. Z powodu braku funduszy w Niemczech czasu II wojny światowej, Zuse używał taśmy filmowej w miejsce kart perforowanych jako nośnika danych wejściowych. John Mauchly (1907 1980) i J. Presper Eckert (1929 1995) byli głównymi twórcami komputera ENIAC, wprowadzonego do użytku w 1946 r. ENIAC jest uważany za pierwszy całkowicie elektroniczny, uniwersalny komputer cyfrowy. Maszyna ta używała 17,468 lamp elektronowych, zajmowała 1,800 stóp kw. powierzchni, ważyła 30 ton i zużywała 174 kilowatów mocy. ENIAC miał pamięć o pojemności około 1000 bitów (około 20 10-cyfrowych liczb dziesiętnych) i używał kart perforowanych do zapisu danych. ENIAC był przeznaczony do przyspieszenia procesu obliczenia tablic balistycznych dla artylerii w końcu II wojny światowej. ENIAC był maszyną pracującą w systemie dziesiętnym, nie dwójkowym. To znaczy, że liczby były reprezentowane w formie dziesiętnej i działania arytmetyczne były wykonywane w systemie dziesiętnym. Pamięć składała się z 20 akumulatorów, z których każdy mógł przechowywać 10-cio cyfrową liczbę dziesiętną. Główną wadą ENIAC-a była konieczność programowania ręcznego poprzez przełączniki i połączenia przewodami.

Historia rozwoju ENIAC, 1946 8/40

9/40 Historia rozwoju Główne kategorie sprzętu obliczeniowego: Proste maszyny liczące (program sprzętowy), np. maszyna szyfrująca Enigma, używająca wirujących tarcz kodujących, kalkulatory elektroniczne) Uniwersalne komputery, (program ładowany do pamięci). Proces programowania jest ułatwiony przez fakt, że program jest reprezentowany w formie pozwalającej na przechowywanie go w pamięci obok danych. Komputer może pobierać kolejne instrukcje programu z pamięci do wykonania, ponadto program może być modyfikowany przez zmianę wartości zawartych w pamięci. Figure: Sprzętowe i programowe podejście do obliczeń [2]

Historia rozwoju Architektura von Neumann a Koncepcja tej architektury (opublikowana przez von Neumann a w 1945 r.), była oparta na pracach Johna Mauchly i J. Presper Eckert, twórców ENIAC a. Komputer von Neumann a składa się z: pamięci przechowującej dane i instrukcje programu jednostki sterującej, która pobiera rozkazy z pamięci, interpretuje je i powoduje ich wykonanie w sposób zależny od wartości danych jednostki arytmetyczno-logicznej (ALU), która wykonuje działania arytmetyczne i inne (logiczne, przesunięcia, itd.) na danych układów wejścia-wyjścia, działających pod kontrolą jednostki sterującej Figure: Architektura von Neumann a [1] Taki system przesyła wszystkie dane przez jednostkę arytmetyczno-logiczną (dokładnie - przez akumulator, który jest częścią ALU), co jest powodem wąskiego gardła (von Neumann bottleneck). 10/40

11/40 Historia rozwoju Zmodyfikowana architektura von Neumann a Opisana architektura została zoptymalizowana przez wprowadzenie magistral (system bus model). Magistrala danych (data bus) przesyła dane między pamięcią główną a rejestrami procesora (CPU). Magistrala adresowa (address bus) utrzymuje adres danej, która jest przesyłana. Magistrala sterująca (control bus) rozprowadza sygnały sterujące przepływem danych w systemie. Inne ulepszenia podstawowej architektury von Neumann a to: wykorzystanie rejestrów indeksowych (index registers) do adresowania, obsługa danych zmiennoprzecinkowych (floating point data), użycie przerwań (interrupts) i asynchronicznych operacji wejścia/wyjścia (asynchronous I/O), wprowadzenie pamięci wirtualnej (virtual memory) i rejestrów ogólnego przeznaczenia (general registers).

Komputer IAS - pierwszy przykład architektury von Neumann a Zbudowany w Princeton Institute for Advanced Studies, IAS działa powtarzając wykonywanie cyklu rozkazu. Każdy cykl rozkazu składa się z dwu części: Cyklu pobrania (fetch cycle), w którym kod operacji następnej instrukcji jest ładowany do rejestru IR a pole adresu jest ładowane do rejestru MAR. Instrukcja może być pobrana z rejestru IBR, lub z pamięci poprzez załadowanie słowa do rejestru MBR, a potem do IBR, IR i MAR. Cyklu wykonania, który zaczyna się gdy kod operacji jest w rejestrze IR. Jednostka sterująca interpretuje kod operacji i wykonuje instrukcję, wysyłając odpowiednie sygnały sterujące tak aby przesłać dane lub wykonać działania arytmetyczne w ALU. 12/40

13/40 Komputer IAS Zbiór rejestrów Jednostka sterująca i ALU zawierają specjalne komórki pamięci, nazywane rejestrami, o następującym przeznaczeniu: Rejestr buforowy pamięci (Memory buffer register) (MBR): przechowuje słowo, które ma być zapisane do pamięci lub układu wyjścia, lub słowo które ma być odczytane z pamięci lub układu wejścia. Rejestr adresowy pamięci (Memory address register) (MAR): przechowuje adres w pamięci słowa, które ma być zapisane z lub odczytane do rejestru MBR. Rejestr rozkazu (Instruction register) (IR): zawiera 8-bitowy kod operacji instrukcji właśnie wykonywanej. Rejestr buforowy rozkazu (Instruction buffer register) (IBR): przechowuje tymczasowo prawostronną instrukcję z bieżącego słowa pamięci. Licznik programu (Program counter) (PC): zawiera adres następnej pary instrukcji przeznaczonej do pobrania z pamięci. Akumulator (Accumulator) (AC) i multiplier quotient (MQ): przechowuje tymczasowo argumenty i rezultaty operacji ALU. Na przykład, rezultat mnożenia dwu liczb 40-bitowych jest liczbą 80-bitową; najbardziej znaczące 40 bitów są zapisywane we AC, a najmniej znaczące w MQ.

14/40 Komputer IAS Organizacja pamięci Pamięć komputera IAS składała się z 1000 komórek, zwanych słowami, każde o długości 40 liczb binarnych (bitów). Zarówno program jak i dane były przechowywane w tej pamięci. Liczby i instrukcje były reprezentowane w formie binarnej. Liczby były reprezentowane z użyciem bitu znaku i 39-bitów kodujących wartość. Słowo mogło też przechowywać dwie 20-bitowe instrukcje. Każda z nich składała się z 8-bitowego kodu operacji (opcode) określającego operację do wykonania i 12-bitowego adresu określającego jedno ze słów w pamięci (numerowanych do 0 do 999). Figure: Organizacja pamięci komputera IAS [2]

15/40 Komputer IAS Zbiór instrukcji Komputer IAS miał 21 instrukcji, w 5 grupach: Przesyłanie danych: między pamięcią a rejestrami ALU lub między dwoma rejestrami ALU. Skok bezwarunkowy: Normalnie, jednostka sterująca wykonuje instrukcje kolejno. Aby to zmienić, wykonuje się skok bezwarunkowy (realizacja pętli). Skok warunkowy: rozgałęzienie oparte o warunek, pozwala realizować decyzje. Arytmetyczne: operacje wykonywane przez ALU. Modyfikacja adresu: umożliwia obliczenie nowego adresu i wstawienie go do instrukcji w pamięci.

16/40 Model warstwowy systemu komputerowego Figure: Model warstwowy systemu komputerowego [1]

17/40 Arytmetyka komputerów Dwójkowy system liczbowy - przedstawienie liczb naturalnych System dwójkowy jest systemem pozycyjnym (tak jak dziesiętny), co oznacza, że waga danej cyfry zależy od jej pozycji w liczbie. Liczby naturalne Dla liczby naturalnej A, jej reprezentacja (zwana inaczej rozwinięciem) dana jest zależnością: A = b n 1 2 n 1 +... + b 1 2 1 + b 0 2 0 gdzie b i jest i-tym bitem (cyfrą binarną), a n jest ilością bitów rozwinięcia. Na przykład: liczba dwójkowa 11001 2 oznacza liczbę dziesiętną 25 = 2 4 + 2 3 + 2 0

18/40 Dwójkowy system liczbowy Liczby całkowite ujemne - reprezentacja znak-moduł Bit znaku poprzedza właściwe bity liczby - jest bitem najbardziej znaczącym. Gdy najbardziej znaczący bit jest równy 0, to liczba jest dodatnia i jej wartość oblicza się ze wzoru: A = b n 2 2 n 2 +... + b 1 2 1 + b 0 2 0 Gdy najbardziej znaczący bit jest równy 1, to liczba jest ujemna i jej wartość oblicza się ze wzoru: A = (b n 2 2 n 2 +... + b 1 2 1 + b 0 2 0 ) Na przykład: 01001011 2 = 1 2 6 + 1 2 3 + 1 2 1 + 1 2 0 = 75 10 11001011 2 = (1 2 6 + 1 2 3 + 1 2 1 + 1 2 0 ) = 75 10 Wady tej reprezentacji: Dodawanie i odejmowanie wymagają rozważania zarówno znaków jak i modułów liczb Istnieją dwie reprezentacje liczby 0 (00000000 2 i 10000000 2 )

19/40 Liczby całkowite ujemne Reprezentacja U2 (uzupełnienia do dwóch, czyli podstawy systemu liczbowego) Podobnie jak w reprezentacji znak-moduł, najbardziej znaczący bit jest bitem znaku, tutaj jednak ma wagę 2 n 1 i znak ujemny. Dla liczby całkowitej jej przedstawienie w tym kodzie jest dane wzorem: A = b n 1 2 n 1 + b n 2 2 n 2 +... + b 1 2 1 + b 0 2 0 Jeśli A jest dodatnie, to bit znaku b n 1 jest zerem. Pozostałe bity reprezentują moduł liczby w identyczny sposób jak w reprezentacji znak-moduł Zero jest traktowane jak wartość dodatnia i dlatego ma bit znaku 0 i moduł złożony z samych zer. Stąd zakres dodatnich liczb całkowitych to [0, 2 n 1 1], czyli dla n=8 zakres ten to [0, 127] (z wartością maksymalną gdy wszystkie bity modułu są 1). Większe liczby wymagają więcej bitów w słowie Dla liczb ujemnych bit znaku b n 1 jest 1. Pozostałe n-1 bity określają dowolną z 2 n 1 wartości, stąd zakres tych liczb to [ 2 n 1, 1], czyli dla n=8 zakres ten to [ 128, 1] Zalety reprezentacji U2: zapewnia jednolitą realizację dodawania i odejmowania, dlatego jest powszechnie używana jako reprezentacja liczb całkowitych w większości procesorów brak podwójnej reprezentacji zera, stąd zwiększony o 1 zakres liczb możliwych do przedstawienia

20/40 Liczby całkowite ujemne U2 - przykład, Konwersja liczb binarnych dla różnych długości słów Na przykład: 01001011 2 = 1 2 6 + 1 2 3 + 1 2 1 + 1 2 0 = 75 10 10110101 2 = 1 2 7 + 1 2 5 + 1 2 4 + 1 2 2 + 1 2 0 = 75 10 Konwersja liczb binarnych dla różnych długości słów Jeśli należy rozszerzyć ilość bitów liczby z n do m, (przy czym n < m) to: Dla reprezentacji znak-moduł należy przesunąć bit znaku do najdalszej lewej pozycji, a pozostałe wolne bity wypełnić zerami Dla reprezentacji uzupełnienia do dwóch należy przesunąć bit znaku do najdalszej lewej pozycji, a pozostałe wolne bity wypełnić kopiami bitu znaku (dla liczb dodatnich wypełnia się zerami, dla liczb ujemnych jedynkami).

21/40 Konwersja między systemami dziesiętnym i binarnym Konwersja dziesiętnej liczby całkowitej dodatniej Konwersja z postaci binarnej na dziesiętną jest prosta i wynika bezpośrednio z rozwinięcia Konwersja liczby całkowitej dodatniej z postaci dziesiętnej na binarną jest wykonywana metodą dzielenia przez 2. Jeśli mamy liczbę dziesiętną N to po podzieleniu jej przez 2 otrzymujemy iloraz N 1 oraz resztę r 1, zgodnie z zależnością: N = 2 N 1 + r 1, gdzie r 1 jest 0 lub 1 Następnie dzielimy iloraz N 1 przez 2, otrzymując nowy iloraz N 2 oraz resztę r 2 : N 1 = 2 N 2 + r 2, gdzie r 2 jest 0 lub 1 Stąd: N = 2 (2 N 2 + r 2 ) + r1 = 2 2 N 2 + 2 1 r 2 + 2 0 r 1 Ponieważ N > N 1 > N 2..., postępujemy tak dalej aż do otrzymania ilorazu N k = 1 i reszty r k równej 0 lub 1. Algorytm konwersji z postaci dziesiętnej na binarną Konwersja jest wykonywana metodą dzielenia przez 2. Kolejne reszty r k i ostatni iloraz N k = 1 dają cyfry binarne w kolejności rosnącego znaczenia. Czy to znaczy, że zawsze MSB (najbardziej znaczący bit) jest równy 1? NIE, to zależy od przyjętej długości słowa: kiedy jest dłuższe niż trzeba dla danej liczby, pozostałe bity będą zerami.

22/40 Konwersja między systemami dziesiętnym i binarnym Konwersja dziesiętnej liczby całkowitej dodatniej - przykłady 13 10 = 1101 2 13 : 2 = 6 r 1 6 : 2 = 3 r 0 3 : 2 = 1 r 1 16 10 = 10000 2 16 : 2 = 8 r 0 8 : 2 = 4 r 0 4 : 2 = 2 r 0 2 : 2 = 1 r 0

Konwersja między systemami dziesiętnym i binarnym Konwersja dziesiętnej liczby całkowitej ujemnej Aby przekształcić liczbę całkowitą ujemną do postaci binarnej należy: 1 wykonać konwersję liczby dodatniej o tym samym module 2 zanegować ją (patrz poniżej): Dla reprezentacji znak-moduł negowanie sprowadza się do odwrócenia bitu znaku. Dla reprezentacji uzupełnienia do dwóch należy wziąć uzupełnienie Boole a każdego bitu liczby (łącznie z bitem znaku) i traktując wynik jako liczbę całkowitą bez znaku dodać 1. UWAGA: występują tu dwa przypadki szczególne, które muszą być odpowiednio traktowane: 1 A = 0. Wtedy A = 00000000 2 w reprezentacji U2. Uzupełnienie bitowe 11111111 2. Po dodaniu do niego 1 otrzymujemy przeniesienie, które jest ignorowane, tak więc w rezultacie otrzymujemy poprawny wynik negacji zera równy zero. 2 Negowanie wzoru bitowego złożonego z 1 z następującymi n - 1 zerami daje w wyniku tę samą liczbę. Na przykład: 128 10 = 10000000 2. Uzupełnienie bitowe = 01111111 2. Po dodaniu do niego 1 otrzymujemy 10000000 2 = 128 10. Problem powstaje, ponieważ 128 10 nie może być reprezentowane na 8 bitach. 23/40

24/40 Arytmetyka liczb całkowitych Dodawanie Przy przyjętej długości słowa, możemy otrzymać wynik większy niż dopuszczalny występuje wtedy tzw. przepełnienie. Taki przypadek jest odpowiednio sygnalizowany przez ALU i wynik operacji jest odrzucany. Reguła przepełnienia Jeśli są dodawane dwie liczby dodatnie lub dwie ujemne, to przepełnienie występuje wtedy i tylko wtedy, gdy wynik ma znak przeciwny W pewnych warunkach może wystąpić tzw. przeniesienie - poza końcem słowa pojawia się bit, który musi być ignorowany.

25/40 Dwójkowy system liczbowy Dodawanie liczb całkowitych - przykłady (-7) + (+5) = (-2) 1001 0101 1110 = -2 (+4) + (+5) = (?) 0100 0101 1001 przepełnienie, zgodnie z regułą: wynik jest ujemny, a oba argumenty dodatnie (-4) + (+4) = (0) 1100 0100 10000 przeniesienie, bit ignorowany 0000 = 0 (-4) + (-1) = (-5) 1100 1111 11011 przeniesienie, bit ignorowany 1011 = -5

26/40 Arytmetyka liczb całkowitych Odejmowanie Reguła odejmowania W celu realizacji odjęcia od jednej liczby (odjemnej) drugiej liczby (odjemnika) należy dodać do odjemnej uzupełnienie do dwóch odjemnika.

27/40 Arytmetyka liczb całkowitych Odejmowanie - przykłady (2) - (7) = (-5) M = 2 10 = 0010 2 S = 7 10 = 0111 2 -> 7 10 = 1001 2 0010 +1001 1011 = -5 (-6) - (4) = (?) M = 6 10 = 1010 2 S = 4 10 = 0100 2 -> 4 10 = 1100 2 1010 +1100 10110 przeniesienie, bit ignorowany 0110 przepełnienie (5) - (2) = (3) M = 5 10 = 0101 2 S = 2 10 = 0010 2 -> 2 10 = 1110 2 0101 +1110 10011 przeniesienie, bit ignorowany 0011 = 3 (-5) - (2) = (-7) M = 5 10 = 1011 2 S = 2 10 = 0010 2 -> 2 10 = 1110 2 1011 +1110 11001 przeniesienie, bit ignorowany 1001 = -7

28/40 Arytmetyka liczb całkowitych Podsumowanie Reprezentacje analizowane dotąd można nazwać stało-pozycyjnymi - położenie przecinka pozycyjnego (binarnego) jest ustalone i z założenia znajduje się on na prawo od cyfry położonej najdalej na prawo. Można używać tej samej reprezentacji dla ułamków binarnych, posługując się skalowaniem liczb, tak że przecinek binarny znajdzie się w innym, wybranym położeniu.

29/40 Liczby ułamkowe i rzeczywiste Wymagają one reprezentacji bardziej rozbudowanej. Istnieją dwie jej odmiany: stałoprzecinkowa, gdzie ustala się położenie przecinka binarnego w pewnym miejscu, a więc przeznacza się ustaloną liczbę bitów na część całkowitą i ułamkową liczby. Np., jeśli na część całkowitą przeznaczy się n+1 bitów, a na część ułamkową k bitów, to reprezentacja jest dana zależnością: A = ( 2 b n + 1) (b n 1 2 n 1 +... + b 1 2 1 + b 0 2 0 + +b 1 2 1 +... + b k 2 k ) Podejście to ma ograniczenia: nie mogą być reprezentowane ani bardzo duże liczby, ani bardzo małe ułamki. Ponadto, ułamkowe składniki ilorazu przy dzieleniu dużych liczb mogą być utracone. zmiennoprzecinkowa, gdzie używa się notacji naukowej w formie: ±S B E gdzie S jest mantysą, B jest podstawą systemu liczbowego (10 dla dziesiętnego, 2 dla binarnego), a E jest wykładnikiem. Na przykład, systemie dziesiętnym: 31415000000010 może być reprezentowane jako 0.31415 10 12 0.0000003141510 może być reprezentowane jako 0.31415 10 6. W tym podejściu przesuwa się przecinek dziesiętny do zadanego położenia i używa wykładnika do pamiętania położenia tego przecinka.

30/40 Liczby ułamkowe i rzeczywiste Notacja zmiennoprzecinkowa Takie samo podejście może być stosowane do liczb binarnych. Mogą one być przechowywane w postaci słowa binarnego o trzech polach zawierających: znak (plus lub minus), mantysę S i wykładnik E (podstawa jest ustalona i nie musi być przechowywana). Typowy 32-bitowy format zmiennoprzecinkowy: Lewy bit reprezentuje znak liczby (0 dodatnia, 1 ujemna). Wartość wykładnika jest przechowywana w bitach 23-30, w postaci reprezentacji przesuniętej (ustalona wartość przesunięcia jest odejmowana od pola w celu otrzymania prawdziwej wartości wykładnika). Tu na 8 bitach przechowuje się liczby z zakresu 0-255; po odjęciu przesunięcia równego 128, prawdziwe wartości wykładnika mieszczą się w zakresie 128 do +127. Mantysa jest zwykle tak obliczona, że cała liczba jest znormalizowana, co upraszcza operacje. Liczba znormalizowana ma postać: ±0.1bbb...b 2 E, gdzie b jest dowolną cyfrą binarną. Wynika z tego, że lewy bit mantysy ma zawsze wartość 1, w związku z tym nie trzeba go przechowywać, a mantysa ma wartość z przedziału [0.5, 1.0).

31/40 Liczby ułamkowe i rzeczywiste Notacja zmiennoprzecinkowa Opisany format pozwala na przedstawienie liczb z zakresów: ujemnych ( (1 2 24 ) 2 127, 0.5 2 128 ) ( 1.7 10 38, 1.47 10 39 ) dodatnich (0.5 2 128, (1 2 24 ) 2 127 ) (1.47 10 39, 1.7 10 38 ) Powyższe zakresy nie obejmują pięciu obszarów: liczb ujemnych < (1 2 24 ) 2 127 (przepełnienie ujemne) liczb ujemnych > 0.5 2 128 liczb dodatnich < 0.5 2 128 liczb dodatnich > (1 2 24 ) 2 127 (niedomiar ujemny) (niedomiar dodatni) zera, które jest opisywane specjalnym wzorem bitowym. (przepełnienie dodatnie) Przepełnienie pojawia się, gdy wynik operacji arytmetycznej przekracza co do modułu wartość, która może być wyrażona przez wykładnik równy 127. Niedomiar pojawia się, gdy moduł części ułamkowej jest za mały. Niedomiar jest mniejszym problemem, ponieważ rezultat może być zwykle przybliżony zerem. Dodatkowo, liczby zmiennoprzecinkowe nie są równomiernie rozłożone na osi liczbowej (jak stałoprzecinkowe). Ich gęstość jest największa w okolicy początku osi, a dalej maleje. Dlatego w wielu przypadkach obliczenia są obarczone błędami zaokrągleń.

Liczby ułamkowe i rzeczywiste Standard IEEE dla liczb zmiennoprzecinkowych Najważniejszy standard reprezentacji liczb zmiennoprzecinkowych - norma IEEE 754. Została ona stworzona by: Ułatwić przenoszenie programów między różnymi procesorami Umożliwić rozwój oprogramowania wymagającego intensywnych obliczeń numerycznych. Standard ten definiuje format 32-bitowy (pojedyncza precyzja) i 64-bitowy (podwójna precyzja), odpowiednio przy 8 i 11 bitowych wykładnikach. Dodatkowo, standard definiuje 2 formaty rozszerzone (też pojedynczej i podwójnej precyzji), których format jest zależny od implementacji. Formaty rozszerzone wprowadzają dodatkowe bity dla wykładnika i mantysy (zwanej fraction). UWAGA: nie wszystkie wzory bitowe są interpretowane w zwykły sposób niektóre z nich oznaczają specjalne wartości: zerowy wykładnik wraz z zerowym ułamkiem oznacza dodatnie lub ujemne zero, zależnie od bitu znaku zerowy wykładnik wraz z niezerowym ułamkiem oznacza liczbę nienormalizowaną wykładnik o samych jedynkach wraz z zerowym ułamkiem oznacza dodatnią lub ujemną nieskończoność, zależnie od bitu znaku wykładnik o samych jedynkach wraz z niezerowym ułamkiem oznacza NaN (not a number), wartość używaną do sygnalizacji różnych sytuacji wyjątkowych napotkanych w obliczeniach. 32/40

33/40 Liczby ułamkowe i rzeczywiste Konwersja z postaci dziesiętnej na binarną stałoprzecinkową Dla reprezentacji stałoprzecinkowej konwersja jest wykonywana oddzielnie dla części całkowitej i ułamkowej liczby: 1 Konwersja dla części całkowitej jest wykonywana jak dla liczby całkowitej w reprezentacji znak-moduł 2 Konwersja dla części ułamkowej polega na wykonywaniu mnożenia przez 2. W kolejnych krokach ułamkowa część liczby dziesiętnej jest mnożona przez 2 i cyfra znajdująca się na lewo od przecinka w iloczynie (równa 0 lub 1) wchodzi w skład reprezentacji binarnej począwszy od najbardziej znaczącego bitu. Część ułamkowa iloczynu jest używana jako mnożna w następnym kroku. Na przykład: 0, 25 10 = 00, 01 2 Obliczanie: 1 0,25 * 2 = 0,5 ->.0 2 0,5 * 2 = 1,0 ->.01 UWAGA: Proces ten nie zawsze jest dokładny; ułamek dziesiętny o skończonej liczbie cyfr może wymagać ułamka binarnego o nieskończonej lub większej niż dopuszczalna liczbie cyfr.

34/40 Liczby ułamkowe i rzeczywiste Konwersja z postaci dziesiętnej na binarną stałoprzecinkową Na przykład: 0, 255 10 = 00, 01000001 2 Obliczanie: 1 0,255 * 2 = 0,510 ->.0 2 0,510 * 2 = 1,020 ->.01 3 0,020 * 2 = 0,040 ->.010 4 0,040 * 2 = 0,080 ->.0100 5 0,080 * 2 = 0,160 ->.01000 6 0,160 * 2 = 0,320 ->.010000 7 0,320 * 2 = 0,640 ->.0100000 8 0,640 * 2 = 1,280 ->.01000001 Jaki jest błąd reprezentacji tej liczby? Wartość = 1 2 2 + 1 2 8 = 0, 25 + 0, 0039 = 0, 2539 Błąd = 0,255-0,2539 = 0,0011 = 0,43 %

35/40 Liczby ułamkowe i rzeczywiste Konwersja z postaci dziesiętnej na 32-bitową zmiennoprzecinkową Na przykład: 0, 255 10 = 00111111100000101000111101011100 2 1 Ustawić wartość wykładnika E na 0. 2 Sprowadzić metodą dzielenia lub mnożenia przez 2, liczbę do zakresu [0.5, 1.0). Po każdej operacji dzielenia zwiększać wartość E o 1, przy każdej operacji mnożenia zmniejszać wartość E o 1. W wyniku tego otrzymuje się wartość mantysy, którą należy zakodować bitami 0-22, pamiętając że bit na prawo od przecinka binarnego nie jest zapisywany. 3 Dokonać konwersji mantysy obliczonej w kroku 2 z postaci dziesiętnej do binarnej jak dla reprezentacji stałoprzecinkowej o zerowej liczbie cyfr binarnych przed przecinkiem binarnym i 24 bitami po przecinku. 4 W celu otrzymania wykładnika w reprezentacji przesuniętej, dodać do jego wartości obliczonej w kroku 2 wartość 128. 5 Jeśli wartość liczby jest ujemna, ustawić bit numer 31 na 1, w przeciwnym razie na 0. Obliczanie: 1 E = 0 2 0, 255 2 = 0, 510 E = E 1 3 S = 100000101000111101011100 2 4 E = E + 128 = 127 10 = 01111111 2 5 b 31 = 0 6 Wynik: 0 01111111 000 0010 1000 1111 0101 1100

36/40 Notacja szesnastkowa Jest ona używana w celu bardziej wygodnej reprezentacji zewnętrznej liczb binarnych, tzn. poza systemem komputerowym (wyświetlania lub drukowania zawartości pamięci, plików, itp). W tej notacji, liczby binarne są grupowane czwórkami. Dla każdej możliwej kombinacji 4 bitów istnieje symbol, począwszy od 0 do 9 i od A do F. Te 16 symboli to cyfry szesnastkowe. Stąd ciąg cyfr szesnastkowych można traktować jako wartość całkowitą przy podstawie równej 16. Ciąg ten jest zapisywany z literą H na końcu dla zaznaczenia podstawy stosowanego systemu liczbowego. Na przykład: 2F 16 = 2 16 16 1 + F 16 16 0 = 2 10 16 1 + 15 10 16 0 = 47 Notacja szesnastkowa jest używana nie tylko do wygodnego przedstawiania liczb całkowitych, ale również innych danych binarnych (tekstowych, liczbowych, itp.). Powody jej stosowania: Bardziej zwarta niż binarna Większość komputerów używa słów o długości będącej wielokrotnością 4 bitów Łatwość konwersji między systemem binarnym i szesnastkowym.

37/40 Inne reprezentacje danych dziesiętnych BCD, Packed decimal Pomimo że wewnątrz komputera operacje realizuje się w systemie binarnym, zwykli użytkownicy preferują zapis dziesiętny. W związku z tym istnieje potrzeba przekształcenia na wejściu z postaci dziesiętnej na binarną, a na wyjściu - odwrotnie. Dla aplikacji wymagających dużego nakładu operacji we/wy i stosunkowo małego udziału obliczeń, właściwe jest stosowanie systemu dziesiętnego dla zapisu, odczytu i przetwarzania. Podstawową reprezentacją jest BCD (binary-coded decimal), która jest klasą binarnych sposobów kodowania danych dziesiętnych, w której każda cyfra dziesiętna jest zapisana przy użyciu 4 bitów. Więc 0 = 0000, 1 = 0001, 8 = 1000, a 9 = 1001. Specjalne ciągi bitów są stosowane dla zapisu znaku (używa się cyfry znaku równej 1100 dla dodatnich wartości i 1101 dla ujemnych). Zapis BCD jest dość rozrzutny, ponieważ wykorzystuje tylko 10 z 16 możliwych wartości 4-bitowego słowa. Typową reprezentacją jest packed decimal, w której dwie cyfry dziesiętne liczby upakowuje się w bajcie. Aby zapisać liczby wielocyfrowe, łączy się odpowiednią ilość bajtów. Tak więc, kod liczby 246 to 0000 0010 0100 0110. Znacząco mniejsza gęstość zapisu niż osiągana w systemie binarnym jest kompensowana przez brak konieczności konwersji i - co czasami ważniejsze - brak zaokrągleń. Np. wartość 0.2 może być reprezentowana dokładnie w kodzie BCD (jako 0.0010), ale ma nieskończone rozwinięcie binarne (.001100110011...). Wiele maszyn (starsze: VAX, microvax, nowsze: Intel x86 (32-bit), IBM POWER7) zapewnia specjalne instrukcje arytmetyczne wykonujące operacje bezpośrednio na danych dziesiętnych upakowanych. Algorytmy są bardzo podobne do wcześniej dyskutowanych, ale muszą obsługiwać przeniesienie dziesiętne. Implementacje programowe: Intel Decimal Floating-Point Math Library (2011)

38/40 Reprezentacja znaków ASCII Dotąd dyskutowane reprezentacje stosowane są do działań na liczbach wewnątrz komputera. W celu prezentacji ich w postaci zrozumiałej dla człowieka, należy dokonać ich przekształcenia do postaci tekstowej lub graficznej. Stosuje się w tym celu standardy takie jak: ASCII i UNICODE. ISO opracowała 7-bitowy schemat kodowania zwany International Alphabet Number 5. W 1967 r. wprowadzono standard pochodny, nazwany ASCII. American Standard Code for Information Interchange ASCII definiuje kody dla 32 znaków sterującyh, 10 liczb, 52 liter (małych i wielkich), 32 znaków specjalnych (jak np. @) i znaku odstępu. Najstarszy (ósmy) bit był przeznaczony do kontroli parzystości. Parzystość jest najprostszym ze sposobów detekcji błędów. Bit parzystości jest zerem lub jedynką w zależności od tego czy wartość sumy pozostałych bitów jest parzysta/nieparzysta. Na przykład, jeśli stosuje się kontrolę parzystości (even parity) przesyłając znak ASCII A, najniższe 7 bitów to 100 0001. Ponieważ ich suma jest parzysta, bit parzystości będzie równy 0 i cały kod ASCII będzie równy 0100 0001. Podobnie, przy transmisji znaku ASCII C, 100 0011, bit parzystości będzie równy 1, stąd przesyłana wartość to 1100 0011. Parzystość może być używana tylko do detekcji błędów pojedynczych bitów.

39/40 Reprezentacja znaków ASCII W miarę jak komputery stawały się bardziej stabilne, potrzeba stosowania bitu parzystości malała. W początkach lat 1980-tych, producenci mikrokomputerów zaczęli używać bitu parzystości do rozszerzenia zakresu reprezentowanych znaków (extended character set) przez kody z zakresu 128 10 do 255 10. W zależności od standardu, rozszerzone zestawy znaków mogą reprezentować symbole matematyczne, znaki alfabetów narodowych lub inne symbole. ISO/IEC 8859-2, również znane jako Latin-2, bądź "środkowo " i "wschodnioeuropejskie", jest drugą częścią standardu kodowania znaków zdefiniowanego przez organizację ISO. Tablica kodów ISO/IEC 8859-2, zawierająca m.in. polskie znaki diakrytyczne.

40/40 Reprezentacja znaków Unicode Unicode jest 16-bitowym alfabetem, który jest zgodny wstecznie z ASCII i Latin-1. Jest też zgodny z definicją międzynarodowego alfabetu ISO/IEC 10646-1. Ponieważ podstawowe kodowanie w Unicode jest 16 bitowe, ma on wystarczającą pojemność dla zapisu większości znaków spotykanych we wszystkich językach świata. Dodatkowo, Unicode definiuje mechanizm rozszerzania, który pozwala zakodować milion innych znaków. Jest to wystarczające do reprezentowania znaków wszystkich języków używanych w historii cywilizacji. Unicode jest domyślnym systemem kodowania w języku programowania Java, XML i pochodnych. Cytat ze strony internetowej Unicode Consortium: Zasadniczo, komputery operują na liczbach. Przechowują one litery i inne znaki, poprzez przypisaną do nich liczbę (kod znaku). Przed wprowadzeniem systemu kodowania Unicode, istniały setki różnych systemów kodowania, przyporządkowujących kod do znaku. Nie istniał system kodowania, wystarczająco pojemny dla wszystkich potrzebnych znaków: na przykład, Unia Europejska potrzebuje wielu różnych systemów kodowania do obsługi wszystkich oficjalnych języków. Nawet dla samego języka angielskiego potrzebnych było kilku systemów kodowania dla zapisu liter, interpunkcji i symboli technicznych będących w użyciu. Te systemy kodowania często kolidowały ze sobą, tzn. dwa systemy używały tego samego kodu znaku dla dwu różnych znaków, lub różnych kodów dla tego samego znaku. W tej sytuacji komputery (w szczególności serwery) musiały obsługiwać wszystkie te systemy; a w czasie przenoszenia danych dochodziło do ich przekłamania.