Informacja i jej przetwarzanie

Transkrypt

Informacja i jej przetwarzanie
Informacja i jej przetwarzanie
Wiele nauk wprowadza tzw. pewniki, czyli aksjomaty, na podstawie których buduje się definicje
wszystkich elementów występujących w tych dziedzinach - tak działa np. matematyka i geometria.
W informatyce pojęcie informacji jest pierwotne - nie podaje się ogólnej definicji. Istnieją tylko
definicje specyficzne dla określonych zastosowań - np. do pomiaru ilości informacji. Definicja jest
sama w sobie informacją, a z punktu widzenia logiki obiektu nie możemy definiować nim samym np.
SŁOŃ TO SŁOŃ.
Przyjmijmy zatem, iż informacja jest pojęciem pierwotnym, którego nie będziemy definiowali. Ma
to pewien sens, ponieważ każdy z nas posiada wewnętrzne zrozumienie tego terminu. Zastanówmy
się natomiast, jak można reprezentować czyli przedstawiać informację.
• Za pomocą słów - nie ma wątpliwości, iż ludzie opracowali bardzo efektywny dla siebie
sposób reprezentowania różnych pojęć za pomocą słów. System ten stosujemy codziennie do
komunikowania się. Skoro działa, jest zatem dobry dla nas.
• Za pomocą pisma - słowa możemy zapisać, np. na papierze. W ten sposób utrwalimy je dla
innych ludzi, którzy nie mieli okazji ich usłyszeć. A być może wcale nic nie mówiliśmy,
tylko od razu zapisaliśmy naszą informację w formie pisemnej.
• Za pomocą gestów - wzruszenie ramion, rozłożenie rąk, uchwycenie się za głowę - gesty te
niewątpliwie niosą dla nas różne informacje.
• Za pomocą innych sposobów - np. liczby, znaki drogowe, kolory, fale radiowe, prąd
elektryczny i setki innych sposobów, które wymyślił człowiek (lub przyroda - np. kod DNA)
do przekazania określonych informacji.
Zatem słowa, pismo, gesty, znaki, wszystko to może służyć do reprezentowania informacji.
Elementy te będziemy ogólnie nazywali symbolami. Z kolei zbiór takich symboli nazwiemy
danymi - czyli dane, to symbole, które mogą reprezentować informację. Aby wydobyć informację z
danych, musimy wiedzieć, w jaki sposób informacja została z tymi danymi skojarzona, powiązana.
Nie jest to wcale oczywiste. Jeśli masz wątpliwości, to proponuję taki prosty eksperyment:
Nastaw odbiornik radiowy na audycję w obcym sobie języku i posłuchaj jej przez chwilę.
Czy rozumiesz o czym mówią ludzie w tej audycji? A jeśli nie, to z jakiego powodu? Oczywiście
odpowiesz - bo nie znam tego języka, co w tym dziwnego. Masz rację. Nie znasz języka i nie
rozumiesz. Ale przecież odbierasz dane - czyli słowa. Gdyby dane były równoważne informacji, to
odczytanie jej z tych danych nikomu nie sprawiałoby żadnej trudności i nie musiałbyś uczyć się w
szkole języków obcych (wszystkie języki byłyby nasze). Niestety tak nie jest. Zatem wniosek może
być tylko jeden. Same dane nie są informacją. Musimy jeszcze znać sposób przypisania danych do
określonych informacji - w przypadku języka oznacza to konieczność poznania znaczenia słówek
oraz gramatyki, inaczej będziesz miał poważne kłopoty ze zrozumieniem.
Daną informację można reprezentować za pomocą różnych symboli. Przykładowo pojęcie
PRZYJACIEL w różnych językach to różne słówka:
friend
- angielski
der Freund - niemiecki
el amigo
- hiszpański
le ami
- francuski
barát
- węgierski
mellon
- elficki z Władcy Pierścieni Tolkiena (czarodziej Gandalf wypowiada to słowo, aby
otworzyć magiczne wejście do kopalń Morii). :)
c'khrng
- dźwięk wydawany na widok przyjaciela przez żabopodobne stwory, żyjące w
bagnistych kraterach na czwartym księżycu ósmej planety systemu Syriusza. Ich
krewniacy Lekhomonty w tej samej sytuacji wysyłają błysk promieni gamma :)
Symbole są różne, lecz znaczenie takie samo. Istnieją oczywiście kontrprzykłady - ten sam symbol
oznacza różne informacje, np. słowa wieloznaczne:
zamek (w drzwiach, w kurtce lub duży dom dla rycerza)
dziób (ptaka, samolotu, okrętu)
blok (mieszkanie, krążek z liną, zablokowanie ciosu w karate)
Jednakże w większości przypadków nie dochodzi do zamieszania, ponieważ właściwe znaczenie
słowa wybieramy w zależności od sytuacji, w której jest ono używane. Jeśli mówimy o zamykaniu
zamka na klucz, to oczywiście mamy na myśli zamek w drzwiach, a nie miejsce noclegowe dla
rycerzy (chociaż te zamki też pewnie można było zamykać na klucze). Taka jednoznaczna sytuacja
nazywa się kontekstem użycia danych.
Co z tego dla nas wynika? Otóż jeśli chcemy wyrażać informację w jakiejś czytelnej dla innych
formie, to:
1. Musimy znaleźć odpowiednie symbole, czyli określić dane
2. Musimy tym danym nadać odpowiednie znaczenia, czyli określić ich interpretację
3. Znaczenia danych musimy upowszechnić w grupie, w której będą one wykorzystywane,
czyli określić kontekst.
DANE + INTERPRETACJA + KONTEKST → INFORMACJA
Jeśli powyższe trzy punkty spełnimy, otrzymamy system reprezentacji określonych informacji za
pomocą wybranych symboli - danych. Gdy to już wiemy i rozumiemy, możemy przejść do pojęcia
bitu.
Postawmy się w roli pioniera komputerów. Mamy przed sobą bardzo poważne zadanie - budowę
komputera, czyli maszyny liczącej, która będzie przetwarzała informację. Zanim zaczniemy
montować to ogromniaste urządzenie z tysięcy podzespołów i setek kilometrów kabli, musimy
określić zbiór symboli, które maszyna ma przetwarzać. Innymi słowy musimy określić zbiór danych
dla maszyny oraz sposoby ich interpretacji.
Jakie symbole wybrać? Mowę? Za trudna i jak ją zapisywać wewnątrz maszyny! Pismo? Też
trudne. Gesty lepiej zapomnieć. Ideałem byłby symbole najprostsze z możliwych. Dla takich
symboli może znaleźlibyśmy jakieś w miarę proste sposoby ich realizacji w naszym komputerze za
pomocą odpowiednich obwodów elektronicznych. Co to mogłoby być?
I w tym miejscu ktoś kiedyś dostał olśnienia - najprostszym symbolem byłby taki symbol, który
mógłby występować tylko w dwóch rozróżnialnych postaciach, w dwóch formach, najlepiej
przeciwnych. Dlaczego akurat w dwóch a nie w trzech. Bo dwie postacie są prostsze od trzech,
jasne?!
W układzie elektronicznym taki symbol mógłby być przedstawiany przez np. dwa różne napięcia
elektryczne - pierwsza postać symbolu to napięcie powiedzmy 5V, a druga postać to napięcie 0V.
Dwa różne napięcia da się łatwo rozróżnić i projekt układów elektronicznych, które na takie
napięcia reagują nie jest wcale taki trudny (dla inżyniera elektronika oczywiście - dla większości
licealistów jest to problem typu niemożliwego). Zamiast napięcia można na przedstawiciela
naszego symbolu wybrać wybrać prąd elektryczny - prąd płynie w obwodach - pierwsza postać,
prąd nie płynie - druga postać. A może światło? Jest strumień świetlny - pierwsza postać, nie ma
strumienia - postać druga (cały czas czekam, aż w końcu pojawią się komputery wykorzystujące,
zamiast prądów i napięć, fotony. Przyjemnie byłoby zdjąć obudowę i popatrzyć sobie, jak nasz
komputerek ładnie w środku sobie świeci).
W tym momencie powinieneś zapytać - no dobrze, ale po co mi to wszystko jest potrzebne?
Cały czas chodzi nam o przedstawianie informacji przy pomocy jak najprostszych symboli.
Znaleźliśmy proste dane - symbole dwustanowe. Musimy pokazać, iż takie symbole będą dobrze
nadawały się do naszego celu, czyli pozwolą kojarzyć ze sobą dowolną ilość informacji.
Aby ułatwić sobie życie, oznaczmy stany naszego symbolu cyframi 1 (stan wysoki - np. napięcie
5V, prąd płynie, jest światło, itp.) oraz 0 (stan niski - np. napięcie 0V, brak prądu, brak światła, itp.).
Dlaczego akurat wybraliśmy cyfry 1 i 0? A dlaczego nie? Są to znaki równie dobre jak każde inne
(np. elektronicy często w tym samym charakterze wykorzystują literki H - stan wysoki i L - stan
niski), a dodatkowo, co zobaczymy w dalszych rozdziałach, cyfry 0 i 1 posiadają wiele
pożytecznych dla nas zalet. Otrzymany zbiór danych zawiera teraz dwa rozróżnialne symbole:
Zbiór danych = {0, 1}
Dwóm symbolom można przypisać dwa różne znaczenia, dwie informacje. Jakie? Potrzebne nam w
danym zastosowaniu. Dla przykładu wyobraźmy sobie, iż nasz system komputerowy zbiera dane od
czujników pożarowych, umieszczonych w różnych punktach budynku. Czujnik pożarowy reaguje
na wzrost temperatury lub dym. Jeśli temperatura osiągnie krytyczną wartość lub pojawi się dym w
otaczającym czujnik powietrzu, wewnątrz zostają zwarte dwa przewody i zaczynie płynąć prąd
elektryczny. Brak prądu (stan niski 0) oznacza zatem normalną temperaturę w chronionym
pomieszczeniu. Pojawienie się prądu (stan wysoki 1) informuje nas o wysokiej temperaturze, czyli
o wybuchu pożaru. W tym kontekście stany 0 i 1 mają oczywiste znaczenie:
0 - wszystko jest w porządku, 1 - pożar
W innym kontekście symbole 0 i 1 mogą posiadać zupełnie inne znaczenia (np. 1 - mamy
czekoladę, jest dobrze; 0 - brakło czekolady, panika!). To od nas zależy co im przypiszemy - o
znaczeniu używanych przez ludzi słów decydowali używający je ludzie, a nie niedźwiedzie w
Alpach (te być może przyczyniły się do powstania słów w stylu AUUUUU..., które są rzadkimi,
wspólnymi słowami dla prawie wszystkich języków, których użytkownicy mieli okazję spotkać
niedźwiedzia. Jest to fascynujące, ale nie na temat).
Symbol, który może występować w jednym z dwóch stanów (form, postaci), nazwano bitem.
Twórcą tej nazwy był amerykański statystyk John Turkey, który ją wymyślił w trakcie drugiego
śniadania (najprawdopodobniej po wypiciu dokładnie dwóch łyków kawy z niewielkim dodatkiem
mleka, co jednakże nie ma wpływu na dalsze losy bitów) na jednej z konferencji naukowych w
zimie roku 1943-44. W owym czasie istniały już komputery wykorzystujące opisane przez nas
powyżej symbole dwustanowe do wykonywania różnych obliczeń. Informatycy oznaczali je
cyframi 0 i 1, ponieważ w tej postaci nadawały się doskonale do przedstawiania liczb binarnych,
dwójkowych, za pomocą których komputery liczyły. John Turkey utworzył nazwę bit z literek
dwóch słów angielskich: binary digit (cyfra dwójkowa, czyli 0 lub 1):
bit = binary digit
W późniejszym okresie John ujawnił, iż rozważał jeszcze dwie inne kombinacje literek:
bigit = binary digit
binit = binary digit
Jak dzisiaj już wiemy, przyjęła się tylko pierwsza forma. Określenie bit w charakterze symbolu
dwustanowego, przeznaczonego do symbolicznego reprezentowania informacji pojawiło się po raz
pierwszy w 1948 roku w pracach wybitnego informatyka, Claude Shannona, twórcy teorii
informacji.
Zapamiętaj:
Bit jest symbolem występującym tylko w dwóch różnych stanach, które w informatyce najczęściej
oznaczamy cyframi dwójkowymi 0 i 1. Nazwa bit pochodzi od słów angielskich binary digit (cyfra
dwójkowa). Nazwę tę wymyślił John Turkey w 1943 roku.
Jednemu bitowi możemy przypisać maksymalnie dwie różne informacje - jedną dla stanu 1 oraz
drugą dla stanu 0. Co jednak mamy zrobić, jeśli w pewnym kontekście musimy operować większą
ilością informacji? Cóż, musimy potraktować bity jako literki i tworzyć z nich słowa - zupełnie tak
samo jak w naszym ojczystym języku. Zbadajmy tę możliwość.
Słowo 1 bitowe
0 - pierwsza
informacja
1 - druga informacja
Nowe kombinacje słówek binarnych otrzymujemy z poprzednich
kombinacji dołączając do nich raz bit o stanie 0, a następnie
jeszcze raz dołączając bit o stanie 1. W efekcie ilość kombinacji
zawsze podwaja się.
2
4
8
16
32
0
1
Słowo 2 bitowe:
00 - pierwsza
informacja
01 - druga
informacja
10 - trzecia
informacja
11 - czwarta
informacja
00
01
10
11
000
001
010
011
100
101
110
111
Słowo 3 bitowe:
000 - pierwsza
informacja
001 - druga
informacja
010 - trzecia
informacja
011 - czwarta
informacja
100 - piąta
informacja
101 - szósta
informacja
110 - siódma
informacja
111 - ósma
informacja
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
00000
00001
00010
00011
00100
00101
00110
00111
01000
01001
01010
01011
01100
01101
01110
01111
10000
10001
...
11111
Widzimy wyraźnie, iż dodanie kolejnego bitu do słówka binarnego zwiększa dwukrotnie ilość
możliwych kombinacji stanów bitów tworzących to słowo. Większa ilość kombinacji przekłada się
na większą ilość informacji, które można bezpośrednio przypisać tworzonym słówkom binarnym.
Ponieważ ilość kombinacji podwaja się przy każdym dodanym bicie, otrzymujemy proste
zależności:
1 bit
→ 2 informacje → 21 informacji
2 bity
→ 4 informacje → 22 informacji
3 bity
→ 8 informacji
4 bity
→ 16 informacji → 24 informacji
...
...
n bitów → ...
→ 23 informacji
...
→ 2n informacji
Co z tego wynika? Otóż dla każdej skończonej ilości informacji x zawsze możemy dobrać takie n,
aby n bitowe słówka binarne przyjęły tyle różnych stanów, ile jest potrzebne do zakodowania tej
ilości informacji. W tym celu wystarczy, aby był spełniony warunek:
dla x > 1: n ≥ log2x, n ∈ Ν
Przykład:
Załóżmy, iż w pewnym systemie informatycznym musimy przetwarzać (posługiwać się) 1000
różnych informacji. Przetwarzane informacje będziemy w tym systemie przedstawiać n bitowymi
słówkami. Ile musi wynosić n, aby n bitowe słówka binarne przyjęły co najmniej 1000 różnych
kombinacji?
Odpowiedź: n ≥ log21000 ≈ 9,96578..., Przyjmijmy zatem n = 10.
Dla słówek 10 bitowych liczba wszystkich możliwych kombinacji wynosi 210 = 1024. Wynika z
tego, iż w naszym systemie 24 słówka nie będą posiadały żadnego znaczenia - to nic, pozostaną na
zapas, gdyby w przyszłości okazało się, iż zamiast 1000 informacji będziemy potrzebowali np.
1005.
Zapamiętaj:
Słówka n bitowe przyjmują 2n różnych kombinacji swoich stanów 0 lub 1.
Aby przyjąć x kombinacji, słówka binarne muszą składać się z (n ≥ log2x)
bitów.
Teraz możemy odpowiedzieć na postawione na początku rozdziału pytania:
• Czym jest bit?
Bit jest dwustanowym sygnałem, daną, która może być skojarzona z dokładnie dwoma
różnymi informacjami. Stany bitu oznaczamy cyfrą 1 i 0.
• Do czego jest nam potrzebny bit?
Bitu potrzebujemy do tworzenia słówek binarnych, które z kolei kojarzymy z odpowiednimi
informacjami. W ten sposób dowolną ale skończoną ilość informacji możemy przypisać do
odpowiedniej liczby różnych słówek binarnych.
Procedura kodowania informacji za pomocą bitów
1. Określ dokładnie informację, którą chcesz reprezentować bitami.
2. Policz dokładnie liczbę wszystkich informacji, które będziesz potrzebował w swoim
systemie.
3. Określ liczbę bitów w słówkach binarnych tak, aby ilość ich kombinacji pokryła liczbę
twoich informacji.
4. Zastanów się nad najbardziej efektywnym sposobem przyporządkowania informacji
poszczególnym słówkom binarnym.
5. Przydziel słówkom binarnym poszczególne informacje.
W ten sposób zbudujemy tzw. kod binarny (ang. binary code). Słówka tego kodu będą
reprezentowały przydzielone im informacje. Oczywiście aby odczytać te informacje, należy znać
dokładnie sposób kodowania, czyli przydzielania informacji słówkom kodowym.
Kodowanie grafiki
Na pierwszy rzut oka zadanie wydaje się beznadziejne - jak mogę przekształcić piękne obrazy
Rubensa w jakieś tam bity przyjmujące stany 0 lub 1? Na pewno masz rację, przekształcić ich nie
możemy, lecz z pewnym przybliżeniem możemy zakodować zawartą w tych obrazach informację o
kolorach. Na początek musimy zastanowić się, w jaki sposób będziemy przedstawiali informację
zawartą w grafice, czyli nad sposobami jej reprezentacji.
Postawmy sobie chwilowo mniej ambitne zadanie. Załóżmy, iż nasza grafika zawiera tylko dwa
różne kolory - biały i czarny. Za pomocą bitów zakodujemy kolor na obrazku. Ponieważ mamy
tylko dwa różne kolory, wystarczy na to jeden bit:
bit 0 - kolor biały
bit 1 - kolor czarny
Określiliśmy sposób przyporządkowania informacji do bitu - to jakby język naszej nowej mowy
kodującej grafikę czarno-białą. Pozostaje tylko problem, w jaki sposób ta informacja zawarta w
bitach będzie połączona z obrazkiem. Rozwiązanie jest dosyć proste. Obrazek dzielimy na drobną
siateczkę punktów, tzw. raster. W obrębie danego punktu (zwanego pikselem - ang. pixel = picture
element, czyli element obrazowy) kolor jest stały - albo biały, albo czarny.
Na pewno jest to pewnym oszustwem. Ale jeśli siateczka punktów jest bardzo gęsta, to możemy dać
się na nie nabrać - po prostu nasze oko nie zobaczy poszczególnych punktów, tylko obraz. O to
właśnie chodzi. Poniżej ten sam obrazek, ale w "normalnej wielkości".
Wygląda całkiem miło. Tak otrzymany obrazek zamieniamy na bity: punkty czarne kodujemy bitem
o stanie 1, a punkty białe kodujemy bitem o stanie 0. W postaci bitowej obrazek wygląda tak:
0000111111110000
0011111111111100
0111111111111110
0111111111111110
1100000000000111
1000000000000011
1001111001111001
1000110000110001
1000000000000001
1000000000000001
1000001111000001
1000100000010001
0100011111100010
0100000000000010
0011100000011100
0000011111100000
W takiej formie obrazek może być przechowywany we wnętrzu komputera (pamiętamy oczywiście,
iż bity są kodowane w komputerze poziomami napięć), przesłany przez sieć teleinformatyczną lub
przetwarzany przez odpowiednie algorytmy operujące na bitach. Z postaci bitowej też można bez
problemu odzyskać zawartość obrazka. W tym celu wystarczy zbudować urządzenie, które na
ekranie monitora obrazuje siatkę punktów graficznych, czyli raster. Następnie do urządzenia
przesyłamy informację w postaci bitów dla poszczególnych punktów siatki, a ono wyświetla na
ekranie odpowiednio punkt biały dla bitu 0 i czarny dla bitu 1. Tak właśnie działa karta graficzna
komputera.
Zadanie kodowania grafiki pozornie się komplikuje, gdy obrazek zawiera więcej kolorów. Załóżmy,
iż do narysowania naszej mordki wykorzystamy cztery kolory:
Ponieważ teraz każdy piksel obrazka może przyjąć jeden z czterech różnych kolorów, to informacji
tej nie zmieścimy w jednym bicie - potrzebujemy pary bitów. Dwa bity mogą przyjąć cztery różne
kombinacje swoich stanów: 00, 01, 10 i 11 tworząc cztery różne binarne słówka kodowe. Każdemu
słowu kodowemu przypiszemy jeden kolor piksela. Określmy takie przypisanie:
- 00
- 01
- 10
- 11
Taki sposób kodowania kolorów nazywa się kodowaniem palety barw. Polega on na tym, iż
każdemu kolorowi na obrazku przypisujemy osobne słowo kodowe. Zdefiniowawszy paletę można
już bez problemów przekształcić obrazek w odpowiedni ciąg bitów:
00000000010101010101010100000000
00000101010101010101010101010000
00010101010101010101010101010100
00010101010101010101010101010100
01011010101010101010101010010101
01101010101010101010101010100101
01101011111111101011111111101001
01101010111110101010111110101001
11101010101010101010101010101011
11101010101010101010101010101011
11101010101011111111101010101011
11101010111010101010101110101011
00111010101111111111111010101100
00111010101010101010101010101100
00001111111010101010101111110000
00000000001111111111110000000000
Odkodowanie obrazka nie nastarcza większych trudności, jeśli znamy paletę kolorów i sposób jej
przyporządkowania słowom kodu. Paleta dwubitowa pozwala na zdefiniowanie czterech kolorów.
Paleta 8 bitowa definiuje już 256 kolorów. Paleta 16 bitowa to 65536 barw.
Wniosek: bity nadają się do kodowania grafiki.
Kodowanie tekstów
W tekstach występują litery oraz inne znaki pisarskie. To właśnie one będą informacjami
kodowanymi za pomocą bitów. Dla uproszczenia załóżmy, iż nasze teksty składają tylko z wielkich
liter, cyfr, przecinków, kropek oraz spacji. W ten sposób określimy zbiór informacji do
zakodowania:
{A, B, C, Ć, D, E, Ę, F, G, H, I, J, K, L, Ł, M, N, Ń, O, Ó, P, R, S, Ś, T, U, W, Y, Z, Ź, Ż,
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, przecinek, kropka, spacja}
Wybrany zbiór zawiera 44 różne znaki. Potrzebujemy słówek binarnych o liczbie bitów równej:
n ≥ log244 = 5,4594..., n = 6
6 bitowe słówka binarne dają 26 = 64 różnych kombinacji. My wykorzystamy tylko 44, zatem 20
słów kodowych pozostanie wolne, bez określonego znaczenia (możemy je w przyszłości
wykorzystać na nowe znaki - np. literę X, której chwilowo nie potrzebujemy). Sam przydział
słówek binarnych literkom na etapie projektowania jest zupełnie dowolny (dobrze jednak
zastosować tutaj pewien schemat - w przyszłości może to zaowocować uproszczeniem przy
sortowaniu alfabetycznym tekstów) - ważne jest jedynie to, aby każda literka otrzymała inny kod.
W przeciwnym razie skąd byśmy wiedzieli, o którą literkę chodzi?. Możemy to zrobić tak:
ZNA
K
KOD
ZNA
K
KOD
ZNA
K
KOD
ZNA
K
KOD
A
00000
0
I
00101
1
S
01011
0
2
100001
Ą
00000
1
J
00110
0
Ś
01011
1
3
100010
B
00001
0
K
00110
1
T
01100
0
4
100011
C
00001
1
L
00111
0
U
01100
1
5
100100
Ć
00010
0
Ł
001111
W
01101
0
6
100101
D
00010
1
M
01000
0
Y
01101
1
7
100110
E
00011
0
Ń
01000
1
Z
01110
0
8
100111
Ę
00011
1
O
01001
0
Ź
01110
1
9
101000
F
00100
0
Ó
01001
1
Ż
011110
,
101001
G
00100
1
P
01010
0
0
011111
H
00101
0
R
01010
1
1
10000
0
.
101010
spacja 101011
Określiliśmy tzw. kod znakowy (ang. character code). W takiej postaci literki mogą już być
przetwarzane przez komputery. Dla przykładu zakodujmy w tym systemie jakieś zdanie:
M
I
Ś
U
S
Z
A
T
E
K
010000 001011 010111 101011 011001 010110 011100 000000 011000 000110 001101
W drugą stronę też nie ma specjalnych problemów. Mamy ciąg bitów:
000000001110000000101011010000000000101011011110010011001111011010001011000000
Ponieważ wiemy, iż literki kodowane są za pomocą słówek 6 bitowych, dzielimy ciąg bitów na
takie właśnie słówka:
000000 001110 000000 101011 010000 000000 101011 011110 010011 001111 011010
001011 000000
Każde słówko kodowe zamieniamy na skojarzony z nim znak wg tabeli kodu znakowego.
Otrzymujemy czytelną dla nas postać tekstu:
000000 001110 000000 101011 010000 000000 101011 011110 010011 001111 011010 001011 000000
A
L
A
M
A
Ż
Ó
Ł
W
I
Wniosek: bity nadają się do kodowania znaków.
Kodowanie liczb
Teraz pokażemy sposób przedstawiania liczb naturalnych za pomocą bitów. Wyobraźmy sobie, iż
żyjemy w takim dziwnym kraju (no, może tak bardzo tego nie musimy sobie wyobrażać, wystarczy
się rozglądnąć), w którym wszystkie monety mają nominały równe potęgom liczby 2:
Nomina Potęga 2
A
ł
1
20
2
21
4
22
8
23
16
24
32
25
64
26
...
...
Załóżmy, iż w tym dziwnym kraju wyszło zarządzenie, które głosi, iż wszystkie kwoty należy
wypłacać najmniejszą możliwą liczbą monet. Za nieprzestrzeganie tego zarządzenia rząd nałożył
olbrzymią karę 264. Cóż, nikt tyle pieniążków nie miał, zatem wszyscy rozpoczęli skrupulatne
odmierzanie sum pieniężnych.
Z sumami będącymi potęgami liczby 2 nie ma problemu - wystarczy jedna moneta o właściwym
nominale. Pozostałe sumy wyliczamy następująco:
Trzeba wypłacić 157. Aby monet było jak najmniej, każda o właściwym nominale powinna
wystąpić co najwyżej raz. Ano zobaczmy:
Pierwszą monetą może być 128 (256 byłoby za duże, a 64 musielibyśmy użyć dwukrotnie). Zatem
płacimy 128. Pozostaje wciąż:
157 - 128 = 29
Najbliższą monetą będzie 16. Płacimy 16. Pozostaje:
29 - 16 = 13
Teraz płacimy 8. Pozostaje:
13 - 8 = 5
Płacimy 4. Pozostaje:
5-4=1
I na koniec wypłacamy 1. Podsumujmy:
157 = 128 + 16 + 8 + 4 + 1
No dobrze, powiesz. Co to ma jednak wspólnego z bitami? A ma. Zwróć uwagę, iż przy wypłacie
sumy podejmujemy dla poszczególnych nominałów monet jedną z decyzji:
Wypłacić daną monetę - 1
Nie wypłacać monety - 0
A to są przecież nasze kochane bity. Ułóżmy monety kolejno z prawa na lewo od najmniejszej do
największej. Otrzymamy następujący ciąg nominałów:
Nominał ... 1024 512 256 128 64 32 16 8
Potęga 2 ...
210
29
28
27
4
2
1
26 25 24 23 22 21 20
Teraz pod tak wypisanymi nominałami zapisujemy dla danej sumy pieniężnej wypłaconą liczbę
monet danego nominału:
Nominał ... 1024 512 256 128 64 32 16 8
Potęga 2 ...
157 =
4
2
1
210
29
28
27
26 25 24 23 22 21 20
0
0
0
1
0
0
1
1
1
0
1
Ponieważ dana moneta może wystąpić co najwyżej raz, to pod nominałami zapisujemy tylko cyfry
0 lub 1. Jeśli cyfry potraktujemy teraz jako bity, otrzymamy zapis binarny danej liczby dziesiętnej:
157(10) = ...00010011101(2)
W zapisie tym bit o stanie 1 ma wartość odpowiadającej mu potęgi liczby 2. Bit o stanie 0 ma
wartość 0. Aby obliczyć wartość całej liczby binarnej wystarczy zatem zsumować wartości bitów
o stanie 1.
Oto inny przykład:
W dziwnym kraju na czeku bankier wypisał sumę pieniężną zaznaczając liczbę monet o kolejnych
nominałach, które należy wypłacić klientowi banku. Zrobił to tak:
1011101101
Jaką sumę należy wypłacić? My już wiemy. Skoro poszczególne cyfry oznaczają liczbę monet o
danym nominale, zapisujemy to tak:
Nominał 512 256 128 64 32 16 8
4
2
1
Potęga 2
29
28
27
26 25 24 23 22 21 20
SUMA =
1
0
1
1
1
0
Teraz sumujemy nominały wypłaconych monet i otrzymujemy:
1
1
0
1
512 + 128 + 64 + 32 + 8 + 4 + 1 = 749
Proste? Jeśli nie, to przeczytaj to kolejny raz, aż zrozumiesz.
Formalnie rzecz biorąc, jeśli mamy n bitową liczbę binarną:
bn-1 bn-2 ... b2 b1 b0, gdzie bi = 0 lub 1, dla i = 0,1,2,...,n-1
to jej wartość dziesiętną obliczamy zgodnie z poniższym wzorem:
wartość = bn-12n-1 + bn-22n-2 + ... + b222 + b121 + b020
Wniosek: bity nadają się do kodowania liczb.
Podsumowanie
W rozdziale pokazaliśmy trzy sposoby kodowania informacji za pomocą bitów:
• Kodowanie grafiki
• Kodowanie tekstu
• Kodowanie liczb
Bity dają nieograniczone możliwości kodowania informacji. Jeśli tylko znajdziemy zbiór
wiadomości, które chcemy zakodować, a następnie określimy sposoby przypisania tym
wiadomościom słówek bitowych, będziemy mogli zakodować je za pomocą bitów i przetwarzać na
komputerach. Dlatego bity są tak potężnym narzędziem w rękach informatyków.
Zapamiętaj:
Bity w świecie komputerów nie ograniczają się jedynie do kodowania różnych informacji - cała
współczesna informatyka oraz technologia komputerowa jest na nich oparta. Komputery są
maszynami bitowymi nie tylko w sensie przetwarzania danych, ale również w sensie swojej
budowy - procesory, pamięci, porty wejścia/wyjścia - wszystkie te elementy mają budowę binarną.
Dalsze rozdziały leksykonu opisują elementy logiczne, z których buduje się układy cyfrowe. Bity
są podstawą funkcjonowania tych elementów. Zatem nie bez powodu komputery nazywamy
binarnymi maszynami cyfrowymi.

Podobne dokumenty