Forum Republiki Bialeńskiej
Podział administracyjny => Instytucje Królestwa Hasselandu => Królestwo Hasselandu => Hasselandzka Królewska Szkoła Wyższa => : Bajtuś Sat, 09 Apr 2016, 20:48:58
-
Wykład 1: Liczby dwójkowe.
Komputer to maszyna elektroniczna, dla której naturalnym systemem liczenia byłby taki, który opisywał by dwa stany. Wysoki i niski. Narzuca się tutaj od razu system dwójkowy, jako ten, który ma tylko dwie cyfry w swoim zestawie 0 i 1.
Więc, aby zgłębić tajniki komputera dobrze jest wiedzieć co to jest ten system.
System dwójkowy jest najmniejszym systemem pozycyjnym - zawiera bowiem tylko dwie cyfry (system dziesiętny - używany powszechnie - zawiera aż 10 cyfr). Początkowo niewprawnym użytkownikom może on sprawić trochę problemów, ale po kilu, kilkunastu próbach, problemy znikają. Kiedyś w zamierzchłych czasach w nieistniejącym reala, kiedy usiłowano wprowadzić dziesięciolatkę, w klasach drugich i trzecich wprowadzono naukę systemu dwójkowego i trójkowego. Okazało się, że dzieci bez problemów liczyły w tych systemach, a nawet potrafiły (nie wiedząc o tym liczyć dwójkowo w kodzie BCD). Niestety po paru latach systemy te zniknęły z programu nauczania, bo niestety najwięcej trudności sprawiły nauczycielom uczącym nauczania początkowego).
To tyle historii. Przejdźmy do sedna sprawy.
Podstawą systemu dwójkowego jest liczba 2. Jak wiecie z nauki o systemie dziesiątkowym, kolejne cyfry w zapisie pozycyjnym mają wagę, która jest potęgą podstawy liczenia, czyli w naszym przypadku 2.
Weźmy jakąś liczbę binarną i spróbujmy policzyć jaką ma wartość w systemie dziesiętnym.
10101101
Zaczynamy od końca: 1+0*2+1*4+1*8+0*16+1*32+0*64+1*128= 1+4+16+32+128=181
Proste?
Gorzej (??) jest w drugą stronę, ale nie jest to do końca prawdą.
Istnieje algorytm zamiany liczby dziesiętnej na liczbę w systemie o dowolnej podstawie.
Daną liczbę dziesiętną dzielimy całkowicie przez p (p-podstawa systemu liczenia) dotąd, dopóki w wyniku tego dzielenia nie otrzymamy liczby zero. Otrzymane reszty z dzielenia pisane w odwrotnej kolejności, dają nam szukane rozwinięcie liczby w systemie p.
Spróbujmy to zrobić dla liczby z 181.
181 : 2 = 90 r 1
90 : 2 = 45 r 0
45 : 2 = 22 r 1
22 : 2 = 11 r 0
11 : 2 = 5 r 1
5 : 2 = 2 r 1
2 : 2 = 1 r 0
1 : 2 = 0 r 1 (mamy zero - koniec dzielenia)
i teraz liczba: 10110101
Jako prace samodzielną proszę podać dwójkowo swój wiek.
Jeśli będzie zainteresowanie przedstawię następne części wykładu.
-
Powiedzmy, że mikronacyjnie mam 35 lat.
35/2 = 17 r 1
17/2 = 8 r 1
8/2 = 4 r 0
4/2 = 2 r 0
2/2 = 1 r 0
1/2 = 0 r 1
35 => 100011
-
Jako prace samodzielną proszę podać dwójkowo swój wiek.
10011
-
Obydwaj zaliczyliście pracę domową ;)
-
Powiedzmy, że mam w mikronacjach 20 lat.
20/2 = 10 r 0
10/2 = 5 r 0
5/2 = 2 r 1
2/2 = 1 r 1
Mam 0011 lat.
-
Powiedzmy, że mam w mikronacjach 20 lat.
20/2 = 10 r 0
10/2 = 5 r 0
5/2 = 2 r 1
2/2 = 1 r 1
Mam 0011 lat.
ostatnia linijka jest błędna
2/2=1 r 0
1/2=0 r 1
10100
-
Powiedzmy, że mam w mikronacjach 20 lat.
20/2 = 10 r 0
10/2 = 5 r 0
5/2 = 2 r 1
2/2 = 1 r 1
Mam 0011 lat.
ostatnia linijka jest błędna
2/2=1 r 0
1/2=0 r 1
10100
Mój błąd. ;)
-
Przy małych liczbach, takich jak wiek to można robić w ten sposób:
[ You are not allowed to view attachments ]
Ale jak są to liczby większe, to pozostaje dzielić. ;)
-
Można też odejmować: znaleźć największą potęgę dwójki mniejszą od liczby zamienianej, odjąć ją potem powtórzyć ...aż do otrzymania 0 lub jedynki... problem w pamiętaniu o potęgach, które nie brały po drodze udziału w odejmowaniu bo trzeba by zapisać zera na odpowiednich pozycjach. W sumie najprostsze jest jednak dzielenie. Przy wielkich liczbach dwójkowych stosuje się inny zapis, ale to będzie w kolejnych wykładach.
-
Wykład 2: Operacje logiczne na liczbach dwójkowych
Podstawowymi operacjami w informatyce są operacje logiczne.
Jest ich kilka:
NOT (nie) - negacja / zaprzeczenie - operacja jednoargumentowa
AND (i)- koniunkcja lub iloczyn logiczny - dwuargumentowa
OR (lub) - alternatywa lub suma logiczna - dwuargumentowa
XOR - różnica symetryczna - dwuargumentowa.
W logice rozróżniamy dwa stany: true (prawda) i false (fałsz), a to bardzo pasuje do systemu dwójkowego.
Przymuje się, że fałsz (false) ma wartość 0, prawdza (true) wartość 1.
Dla przypomnienia coniektórym tabele wartości logicznych:
Zaprzeczenie (NOT)
Koninkcja (AND)
Alternatywa (OR)
Różnica symetryczna (XOR)
Ciekawostka:
jesli mama dwieliczby dwójkowe a i b to:
operacja (a XOR b) XOR b = a.
Ale o tym dokładniej w nastepnych wykładach.
-
Wykład 3: Podstawowe pojęcia informatyczne.
Najmniejszą jednostką informatyczną jest BIT.
Przyjmuje on jedną z dwóch wartości: 1 lub 0.
Od niej przyjęło się pewne nazewnictwo związane z komputerami, np
system 32-bitowy, kolor 24-bitowy, procesor 8-bitowy itd.
Operowanie bitami w informatyce byłoby bardzo uciążliwe i kłopotliwe, chociażby w samym zapisie liczby bitowej.
Wyobraźmy sobie, że chcąc się połączyć np. z naszym forum musielibyśmy wpisać ciąg 32-cyfrowy składający się z 0 i 1.
Dlatego wprowadzono większe jednostki.
Podstawową jednostką, którą operuje się jest BAJT (ang: BYTE).
Bajt składa się z ośmiu bitów ułożonych w pewnej kolejności i odpowiednio ponumerowanych:
b7,b6,b5,b4,b3,b2,b1,b0
Bit b7 nazywa się bitem najstarszym, b0 bitem najmłodszym.
Jeśli bajt potraktujemy jako ośmiocyfrową liczbę dwójkową, to okazuje się, że na jednym bajcie można zapisać 256 różnych kombinacji 0 i 1 co daje nam zakres od 0 do 255.
I teraz już wiadomo, dlaczego adresy IP tak wyglądają: 192.168.1.1 - adres IP składa się z czterech oktetów (bajtów), oczywiście mówimy o adresie w wersji 4.
Wróćmy do bajtów.
Tak jak w systemie dziesiętnym, tak i w informatyce są jednostki wielokrotne. Żeby nie mieszać przyjęto przedrostki z systemu dziesiętnego (kilo, mega ...).
Jest tylko mała różnica do przedrostka kilo w systemie dziesiętnym przyjęto liczbę 1000, a ponieważ w informatyce posługujemy sie systemem dwójkowym - do przedrostka kilo przyjęto 2 do potęgi 10 czyli 1024. I tak:
1 KB = 1024 B (kilobajt)
1 MB = 1024 KB (megabajt)
1 GB = 1024 MB (gigabajt)
1 TB = 1025 GB (terabajt)
I tu mała dygresja: Producenci dysków twardych i płyt dvd i bd oszukują klientów podając że np BD25 ma pojemność 25GB a fizycznie ma 23.31GB, to samo dotyczy dysków twardych 1TB dysk nie ma 1TB danych tylko dużo mniej - dlaczego ... przy przeliczaniu na TB zastosowano mnożnik 1000 a nie 1024 i stąd różnica.
Dla wprawy proszę policzyć ile bajtów będzie miała płyta BD25 gdyby ją liczyć właściwie (tzn miała faktyczną pojemność 25GB).
-
1024 * 1024 * 1024 * 25 = 26 843 545 600
-
a płytka BD25 ma 25 025 314 815 B
-
26 843 545 600 B
25 025 314 815 B
=
1 818 230 785 B
czyli ~1,69 GB
Tak więc płytka komercyjnie ma ~23,31 GB.
-
zgadza się
a zobacz sobie dyski twarde 1TB (niektórzy producenci piszą że ma 1000GB), a fizycznie ma 931GB
-
Dla wprawy proszę policzyć ile bajtów będzie miała płyta BD25 gdyby ją liczyć właściwie (tzn miała faktyczną pojemność 25GB).
25 GB = 25 * 1024 MB = 25600 MB = 25600 * 1024 KB = 26214400 KB = 26214400 * 1024 B = 26843545600 Bajtów
-
Wykład 4: Liczby heksadecymalne.
Operowanie liczbami dwójkowymi dla przeciętnych zjadaczy chleba jak i dla "tych co są w temacie" wraz z rozwojem
technologii informatycznych stało się bardzo uciążliwe. Już w latach 90 ubiegłego stulecia programiści zaczęli ułatwiać sobie życie.
Zauważono, że trzycyfrowe liczby dwójkowe mają wartości od 0 do 7, a to są cyfry używane przez system ósemkowy. I zamiast pisać
liczbę dwójkową: 11111111 można napisać 377 (ósemkową). System ósemkowy, krótko zagościł u programistów,
bo okazało się że zamiast 3 cyfr dwójkowych można wziąć 4 cyfry dwójkowe (a to jest akurat połowa bajtu).
System ósemkowy utrzymał się w systemie LINUX do zapisu uprawnień do plików i folderów.
Czterocyfrowa liczba dwójkowa przeniesie wartości od 0 do 15, a to odpowiada systemowi szesnastkowemu (heksadecymalnemu).
Problem w tym, że w alfabecie łacińskim wykorzystano do zapisu liczb cyfry arabskie, a tych jest tylko 10
(bo tyle potrzeba do zapisu liczby w systemie dziesiątkowym). Dlatego przyjęto na potrzeby zapisu cyfr
hexadecymalnych od 10 do 15 jedno-znakowe cyfry, którymi są początkowe litery alfabetu łacińskiego.
I tak cyfrę 10 oznaczono literą A, 11 - B, 12 - C, 13 - D, 14 - E i 15 - F.
i tak jeden bajt przyjmuje wartości od 0 ..255 dziesiętnie; od 0 ... 377 ósemkowo i od 0 .. FF szesnastkowo.
Zamiana liczb dziesiętnych na hexa korzysta z tego samego algorytmu co na system dwójkowy.
I tu ciekawostka: osoba, która ma 18 lat zapisanych w systemie heksadecymalnym faktycznie ma 24 lata (dziesiętnie).
Wykorzystanie liczb szesnastkowych np do zapisu koloru w standardzie RGB:
np. kolor biały to #FFFFFF (znak # oznacza zapis szesnastkowy liczby), a czarny
#000000.
(Pierwsze dwie cyfry hexa odpowiadają za ilość koloru czerwonego (R), dwie następne za kolor zielony (G), a ostanie dwie za kolor niebieski (B)).
Praca domowa:
Proszę zamienić liczbę 128567 na liczbę szesnastkową i podać jaką wartość dziesietną ma liczba #25AB.
-
Wykład 5: U2
Wbrew oczekiwaniom tematem dzisiejszego wykładu nie będzie historia zespołu U2.
Jak pamiętacie z poprzednich wykładów na liczbach binarnych da się zapisać liczby naturalne.
W zastosowaniach operowanie takimi tylko liczbami stwarza duże problemy. Na przykład chcielibyśmy wykonać następujące działanie: 2-5 = -3. No i tutaj mamy mały szkopuł, pojawił się znak minus, a jego nie ma w liczbach dwójkowych. Cóż więc zrobić.
Oczywiście ten problem został szybko rozwiązany, lecz nie sie on za sobą ciekawe błędy, wynikające z nieostrożności programisty niż z błędów komputera.
Jak zapisać w kodzie dwójkowym liczbę ujemną. Rozpatrzmy to na przykładzie 4-cyfrowej liczby binarnej (będzie łatwiej).
Otóż umówiono się, że najstarszy bit w liczbie będzie tzw. bitem znaku - 0 oznaczać będzie liczbę dodatnią, 1 - liczbę ujemną.
No dobrze spróbujmy się z tym pobawić.
Weźmy np liczbę 3 - w kodzie dwójkowym jest to: 11.
Uzupełnijmy ją do czterocyfrowej liczby dwójkowej: 0011.
Zatem najprościej liczba -3 wyglądałaby następująco : 1011 (najstarszy bit 1 czyli ujemna).
Zobaczmy czy to jest dobrze. Najprościej sprawdzić to dodając obie liczby do siebie: 3 + (-3) = 0.
0011
1011
-----
1110
Łoł ... i wyszedł zonk zgodnie z naszą zasadą 3 + (-3) = -6, a powinno być 0.
Czyli nasza umowa dotycząca wyglądu liczby ujemnej nadaje się na szczaw. I tu dochodzimy do nieszczęsnego U2.
U2 zwany pospolicie kodem uzupełnień do 2 polega na tym, że aby stworzyć liczbę ujemną wszystkie bity naszej liczby negujemy a potem dodajemy do najmłodszego bitu 1.
Spróbujmy to zrobić z naszą nieszczęsną 3
0011 - nasza liczba
1100 - liczba po zanegowaniu (zamiana 1<->0)
1101 - po dodaniu do najmłodszego 1.
czyli -3 = 1101
Sprawdźmy, jak poprzednio:
0011
1101
----
0000
Sukces.
Jakie to niesie za sobą problemy. W swojej długiej karierze programistycznej parę razy sam się na nie nabrałem.
Weźmy np i wykonajmy w liczbach całkowitych (czery cyfry binarne) następujące działanie: 4 + 5.
Z arytmetyki wiemy, że wynosi to 9. Zobaczymy jak policzy komputer:
0100
0101
----
1001
binarnie jest to liczba 8, ale my liczymy w liczbach całkowitych, więc ponieważ najstarszy bit jest równy 1 - mamy do czynienia z liczbą ujemną jaką policzmy:
1001
1000 po odjęciu 1
0111 po zanegowaniu: 7 czyli -7
lub inaczej -8 + 0*4 + 0*2 + 1 = -8 +1 = -7 czyli
4 + 5 = -7
Skąd ten problem, ano... przy takim zapisie dla czterocyfrowej liczby całkowitej zakres wynosi od -8 do 7, a wynik nie mieści sie w zakresie i stąd ten błąd. Dlatego też wykonując rózne obliczenia programista musi przewidzieć okoliczność coby w wyniku różnych działań nie przekroczyć zakresu. W naszym przypadku wystarczyłoby operować na bajcie czyli 8 bitach i byłoby po problemie, chociaż nie do końca, bo tutaj zakres jest od -128 do 127 itd.
Ćwiczenia:
Przedstaw liczby: -115, -41, -100 w zapisie U2 dla liczby całkowitej zapisanej na bajcie.
-
Wykład 6: Zmienny przecinek
Z poprzednich rozważań wiadomo już jak można zapisać binarnie liczbę całkowitą. Czas na liczby rzeczywiste.
I tutaj z pomocą przyszły logarytmy. Ci co coś więcej łykneli matematyki (przez duże M0 wiedzą o co chodzi. W logarytmach wyróżnia sie ceche liczby i mantysę. Dlaczego to wybrano. Ano zobaczmy na przykładzie dwóch licz: 12345678.987654321 i
0.0000000000000000123456. Jaki zapis dawałby podobny wygląd tych liczb coby je wstawić do pamięci (czyli zapisać binarnie).
Najlepiej byłoby przedstawić je w notacji naukowej (czyli zapisie lwykładniczo-logarytmicznym).
i tak pierwszą w przybliżeniu można było by zapisać jako:0.12345*10 do potęgi 8, a drugą: 0,12345*10 do potęgi -17.
O i mamy podobnie wyglądające liczby.
To co stoi przed 10 nazwano mantysą liczby (zakres od 0,1) potęga dziesiątki nazwano cechą.
Najprostsze liczby zmiennoprzecinkowe można przechować na 3 bajtach.
pierwszy cecha zakres od -128 ... 127
mantysa na pozostałych dwóch przedstawiająca 15-bitowa liczbę ze znakiem
Dokładność tych liczb była dosyć dobra - biblioteki do operacji na 3 bajtowym zmiennym przecinku opracowano w IEA na potrzeby obliczeń do pomocy operatorom bloku energetycznego w EB. Źródło było publikowane w literaturze i napisane było w języku assembler na procesor Intel 8080.
W obecnych językach programowania na zmienny przecinek przyjmuje się od 8 do 16 bajtów.