WYKŁAD nr 2 - DANE
Rodzaje danych
Wartości logiczne
Znaki tekstowe
Liczby
Całkowite: nieujemne i ze znakiem
Niecałkowiete: stało- i zmiennopozycyjne
Dźwięki
Obrazy
Reprezentacja danych
Komputer operuje na liczbach binarnych, które złożone są z cyfr 0,1
Liczby binarne określone są jako słowo binarne i są przeważnie postaci 8x2n (np. 8, 16, 32, 64)
Dane, które nie są liczbami (obrazy oraz dźwięki) muszą być zapisane z wykorzystaniem słów binarnych
Znaki alfanumeryczne
Znaki tekstowe kodowane są jako liczby, zgodnie z tzw. tablicą kodową
Używane kody:
ASCII (American Standard Code for Information Interchange)
128 pozycji w tym małe i wielkie litery alfabetu łacińskiego
Rozszerzenia ASCII do 256:
pierwsze 128 jest to ASCII kolejne zawierają symbole narodowe lub inne
Pojawia się problem niejednoznaczności kodów dla różnych języków
Kody EBCDIC (Extended Binary Coded Decimal Interchange Code) - wykorzystywany na komputerach typu mainframe IBM,
UNICODE - początkowo 216, aktualnie 232. Reprezentacja praktycznie wszystkich znaków używanych na świecie.
ASCII
Zaproponowany przez ANSI na bazie kodu dla urządzeń dalekopisowych
Początkowo 7 bitowy, 8 bit wykorzystywany był jako suma kontrolna
128 pozycji w tym 33 znaki białe oraz 95 znaków widocznych
Znaki białe: spacja, kody formatujące, kody sterujące transmisją i urządzeniami
Znaki widoczne: cyfry oraz małe i duże litery, znaki interpunkcyjne oraz podstawowe znaki mateamtyczne
ASCII (2)
Kody sterujące:
Pozycje od 0 - 31
Np. CR: 13, (tzw. karetka) - powrót na początek wiersza, LF-10 - przejście do następnego wiersza, etc …
Spacja: 32
Cyfry 0-9: od 48 do 57
Znaki pisarskie:
Małe litery: 97 - 122
Duże litery: 65 - 90
Odstęp pomiędzy dużymi i małymi wynosi: 32
Kod specjalny 127 - kasowanie znaku
Kod rozszerzony ASCII
Reprezentacja tablicy kodów 8 bitowa - 256 znaków
Pierwsze 128 znaków identyczne z ASCII
Pozostałe znaki dostosowane do alfabetów regionalnych tj. słowiańskie, cyrylica, etc…
Problemem jest różnorodność tablic kodowych:
ISO8859 - alfabety słowiańskie, kilkanaście tablic (Polskie znaki: 8859-2)
Microsoft - oznaczenia 4 znakowe np. 1250
Reprezentacja danych związanych z obrazem i dźwiękiem
Obraz i dźwięk muszą być również kodowane jako liczby
Dźwięk - proces przekształcania do postaci cyfrowej: kwantowanie (wartość amplitudy napięcia), próbkowanie (częstotliwość pobierania próbki) i kodowanie (przypisanie kodu)
Obraz - macierz pikseli. Każdy piksel ma określony kolor oraz współrzędne. Kolor reprezentowany w postaci 3 liczb (czerwony, niebieski oraz zielony RGB). Dodatkowa informacja o jasności.
Jednostki informacji
Bit (Binary digIT),
skrót „b” z modyfikatorem wielkości np. Kb, Mb, Gb.
Problem z przeliczaniem (przedrostki w SI są dziesiętne)
Reprezentuje wartość logiczną Prawda/Fałsz
Bajt (byte) - 8 bitów. Jednostka adresacji pamięci. Bajt określany jest jako OCTET
Słowo (word) - wielkość informacji, na której pracuje komputer. Słowo 8 bitowe, 16 bitowe, etc…
Słowo procesora - porcja danych naturalna dla danego procesora, tzn. długość odpowiada długości posiadanych rejestrów: np. 16 bitów, 32 bity, 64 bit.
Zapis danych
Wartości logiczne
Liczby całkowite nieujemne
Liczby całkowite ze znakiem
Zapis stałopozycyjny
Zapis zmiennopozycyjny
Formaty dla obrazu, dzwięku
Zapis danych boolowskich
Do reprezentacji wartości logicznej wystarczy jeden bit.
W komputerach podstawową jednostką jest słowo. Dane bitowe reprezentowane są jako wzorzec bitów zapełniający całe słowo
Różne reprezentacje wartości logicznych zależnych od systemów operacyjnych oraz języków programowania:
Fałsz - raczej standardowo reprezentowany przez 0
Prawda: np. w C reprezentowana przez 1, w C jako argument może być reprezentowana przez dowolną wartość różną od 0, a w VB przez jedynki „1”
Liczby całkowite nieujemne
Naturalny kod binarny (NKB) - ciąg ponumerowanych bitów od lewej do prawej o długości równej słowu
Kod BCD - wykorzystywany do reprezentacji liczb dziesiętnych stałopozycyjnych.
Wersja spakowana: 2 cyfry w bajcie
Wersja niespakowana (ASCII) jedna cyfra w bajcie
Zapis liczb całkowitych ze znakiem
Kod U2 - kod uzupełnień do dwóch
Kod U1 - kod uzupełnień do jednego
Znak-Moduł
Reprezentacja spolaryzowana (biased)
Własności kodów
Reprezentacja zera: dwie możliwość w kodach znak-moduł, U1
Symetryczność zakresu liczbowego
Reprezentacja znaku liczby oraz zmiana znaku:
U1 - negacja bitowa
U2 - negacja i inkrementacja
znak-moduł - negacja bitu znaku
Dodawanie i odejmowanie w U2 wykonywane tak samo jak w NKB
Reprezentacja stałopozycyjna
Wykorzystywany do reprezentacji liczb ułamkowych i mieszanych
Liczba reprezentowana jest przez dwie części:
pierwsza tak jak w U2/NKB reprezentuje część całkowitą
druga reprezentuje część ułamkową (2-1)
Spotykane formaty:
1 lub 2 bity należą do części całkowitej pozostałe do ułamkowej
Po połowie słowa na część całk. i ułamkową
Operacje wykonywane podobnie jak na liczbach całkowitych. Za ostateczną reprezentację odpowiedzialny jest programista
Zapis zmiennopozycyjny (1)
Umożliwia zapis liczb całkowitych i ułamkowych o dużym zakresie dynamiki wartości
Zapis zmiennopozycyjny dziesiętny. Wiele możliwości: np. 1,234x102, 123,4x100, 12,34x101
Budowa zapisu:
Znak liczby
Część znacząca
Wykładnik
Postać znormalizowana: część całkowita wyraża się pojedynczą liczbą różną od 0.
Binarny zapis zmiennopozycyjny
Znormalizowany zapis określony w IEEE754
Liczba powinna zostać zapisana w postaci znormalizowanej, wówczas cześć całkowita w każdym przypadku (oprócz 0) jest równa 1.
Wykładnik jest zapisywany w kodzie z polaryzowanym. Dwie wartości pola wykładnika są zarezerwowane i mówią, że zapis nie reprezentuje postaci znormalizowanej
00…00 - postać nieznormalizowana
11…11 - nie liczba
Znak liczby - pojedynczy bit (0 - liczba nieujemna 1 - liczba niedodania)
Pole mantysy - zawiera cześć ułamkową
Arytmetyka na liczbach zmiennopozycyjnych
Wartości zapisane w postaci zmiennopozycyjnej oraz operacje arytmetyczne wykonywane na nich są przybliżone
Dokładność wyniku może być uzależniona od kolejności wykonywania działań
Dodawanie/odejmowanie liczb należy wykonywać w kolejności rosnącej
Jeśli wartość bezwzględna liczby a jest znaczenie mniejsza od b to w wyniku otrzymujemy liczbę b
Z powodu przybliżonych wyników obliczeń nie należy korzystać z relacji równości.
Organizacja pamięci w komputerach
Podstawowa jednostka adresowalna ma rozmiar 1 bajtu
Dane większe niż 1 bajt są przechowywane w kolejnych komórkach pod kilkoma kolejnymi adresami
Fizyczna organizacja pamięci odbiega od logicznej. Komórki pamięci są dwukrotnie większe niż słowo, co umożliwia przesłanie podwójnej porcji danych przy tym samym czasie dostępu
Adresowanie danych
Little Endian - najmniejszy bajt pod najmniej znaczącym adresem
Big Endian - najbardziej znaczący bit pod najmniejszym adresem
Litlle Endian
Adres bajtu odzwierciedla wagę bajtu w liczbie
Naturalna dla komputera, dziwna dla człowieka
Dostęp do mniej znaczących części liczby całkowitej zapisanej w długim formacie spowoduje, że adres zmiennej będzie ten sam. Wygodne w częstym rzutowaniu typów całkowitych
32-bit zawartość 4A 00 00 00 może być czytana z tym samym adresem jako 8-bit (wartość = 4A), 16-bit (004A), lub 32-bit (0000004A)
Procesory, które używają formy little endian, to między innymi Intel x86, AMD64, DEC VAX
Big Endian
Naturalny dla człowieka mniej wygodny przy obliczeniach
Dostęp do danej całkowitoliczbowej wymaga zmiany wartości adresu w zależności od długości danej.
Duża efektywność porównywania łańcuchów znakowych. Porównywanie może zostać przeprowadzone po długości słowa, a nie koniecznie bajt po bajcie.
Procesory, które używają formy big endian, to między innymi SPARC, Motorola 68000, PowerPC 970, IBM System/360, Siemens SIMATIC S7