Technologie Informatyczne Wykład IV/V A. Matuszak 22 października 2010
Pozycyjny układ liczenia Cyfry rzymskie: IX+LC=? Cyfry arabskie: 2341 = 2 1000+3 100+4 10+1 1 = 2 10 3 +3 10 2 +4 10 1 +1 10 0 Pozycyjny układ liczenia: ABC a = A a 2 + B a 1 + C a 0 Układ dwójkowy: 10111 2 = 1 2 4 +0 2 3 +1 2 2 +1 2 1 +1 2 0 = 1 16+0 8+1 4+1 2+1 1 = 23 10 Układ ósemkowy: 123 8 = 1 8 2 + 2 8 1 + 3 8 0 = 1 64 + 2 8 + 3 1 = 83 10 Układ szesnastkowy (A=10, B=11,... F=15): 71 16 = 7 16 1 + 3 16 0 = 7 16 + 1 1 = 113 10 F 1 16 = 15 16 1 + 3 16 0 = 15 16 + 1 1 = 241 10
Przeliczanie z dziesiętnego na dwójkowy Kolejne reszty z dzielenia liczy przez 2 dają (od końca) liczbę dwójkową. 23 : 2 = 11 r 1 11 : 2 = 5 r 1 5 : 2 = 2 r 1 2 : 2 = 1 r 0 1 : 2 = 0 r 1 23 10 = 10111 2 Przeliczanie z dwójkowego na ósemkowy i szesnastkowy dzielimy liczbę na grupy po trzy cyfry: 10111 2 = {10} {111} = {2} {4 + 2 + 1} = {2} {7} = 27 8 dzielimy liczbę na grupy po cztery cyfry: 10111 2 = {1} {0111} = {1} {4 + 2 + 1} = {1} {7} = 17 16 = 23 10
Bit wartość reprezentująca 0 lub 1. Każda liczba (całkowita) zapisana w postaci dwójkowej (binarnej) odpowiada sekwencji (ciągowi) bitów. Ze względów praktycznych bity grupujemy w porcje zwane bajtami. 1 bajt (1B) (ang. byte) zawiera 8 bitów. Wielokrotności bajtu to: kilobajt (kb) równy 1024 B megabajt (MB) 1024 2 B gigabajt (GB) 1024 3 B Konflikt z przedrostkami SI. KiB (kibibajty), MiB (mibibajty), GiB (gibibajty) Liczby całkowite ze znakiem Jeśli chcemy uwzględnić znak liczby to musimy poświęcić jeden bit na zaznaczenie, że liczba jest ujemna. Powoduje to, że pierwszy bit znaczy co innego niż wszystkie pozostałe. Oprócz tego mamy +0 i -0. Arytmetyka uzupełnieniowa: najbardziej znaczący bit ma znak -. 10111 U2 = 1 2 4 +0 2 3 +1 2 2 +1 2 1 +12 0 = 16+4+1 = 11 (wiodące zera!)
Liczby rzeczywiste Najprostszy pomysł, para liczb całkowitych: 1234.56 1234 i 56 Znaczne ograniczenie zakresu. Liczba rzeczywista w postaci znormalizowanej: 1234.56 = 0.123456 10 5 Lepszy pomysł, trójka liczb całkowitych: 0.123456 10 5 0 123456 5 Zera nie trzeba pamiętać, jeśli umówimy się, że pierwsza cyfra z drugiej trójki jest różna od zera! Jak zapisać 0.0? Kod Morse a e. o --- s... t - sos... ---......---... eeeoeee? sos? eeettteee /.../---/.../ sos /./././---/./././ eeeoeee Trzy stany:., - i / (0,1 i 2)
Sposób reprezentacji Nie można (w praktyce) reprezentować ciągów bitów o dowolnej długości. Musielibyśmy posiadać informacje gdzie zaczyna się i gdzie kończy porcja bitów (zer i jedynek) reprezentująca wielkość. Każda reprezentacja binarna danych ma ustaloną wielkość (ilość bitów). Ta wielkość jest cechą architektury komputera (głównie procesora). ASCII ACSII to międzynarodowy standard zapisu znaków (liter, cyfr i in.) przy pomocy ciągu bitów. Jako wyjątek od reguły ASCII jest niezależny od architektury. Każdy znak jest zapisany w jednym bajcie czyli na 8 bitach. Każdemu znakowi jest przypisana pozycja w tabeli. Każdej pozycji (liczbie od 0) przypisana jest sekwencja bitów będąca reprezentacją dwójkowa pozycji. Znaków może być 256.
Rozszerzone ASCII Znaki narodowe. polskie: ą, ę, ć, ł, ó, ń, ś, ź, ż Strony kodowe: cp852, ą 165, ę 169 cp1250, ą 185, ę 234 iso 8859 2, ą 177, ę 234 Brak informacji o kodowaniu wewnątrz dokumentu!! Lokalizacja Linux ustawienie języka, zmienna LANG=pl PL wyświetlanie, zestaw czcionek, zmienna LC CTYPE=pl PL wprowadzanie, setxkbmap pl sortowanie, zmienna LC COLLATE=pl PL
MIME Poczta elektroniczna Content-Type: text/plain; charset=... Content-Transfer-Encoding:... 8bit Wykłady odbywają się we środy quoted printable Wyk=B3ady odbywaj=b1 si=ea we =B6rody base64 (nie używać do tekstu!!) V3lrs2FkeSBvZGJ5d2FqsSBzaeogd2UgtnJvZHkK Unicode utf 16 65536 znaków każdy znak jest zapisywany na dwu bajtach, ponieważ znak o kodzie 0 (null byte) jest powszechnie używanym separatorem, trzeba zmienić połowę systemów informatycznych utf 8 4.29 10 9 znaków zmienna długość, od 1 do 4 bajtów przy 1 bajcie zgodny z podstawowym ASCII, więc null bajt zachowuje swoje znaczenie
Porządek danych Cyfry w liczbie: 1234 Pismo: od lewej do prawej od prawej do lewej od góry do dołu Kolejność liczebników: polski: dwadzieścia-jeden angielski: twenty-one niemiecki: ein-und-zwanzig Porządek danych (2) Kod pocztowy: Europa kontynentalna kod miasto: 31 155 Kraków Kraje anglosaskie miasto kod: BOURNEMOUTH BH1 1AA Data (LC TIME): polski (dawny): dd/mm/yyyy 13/07/2003 polski (nowy): yyyy-mm-dd 2003-07-13 amerykański: mm/dd/yyyy 07/13/2003 (Farenheit 9/11 Farenheit 11 września)
Kolejność bajtów Jonathan Swift Podróże Guliwera. Wojna Liliputów i Blefusków czy jajko należy obierać od grubego końca czy od cienkiego. Analogiczny i równie zażarty spór toczył (i toczy) wśród informatyków na temat kolejności danych. Przedmiot sporu najczęściej ilustruje się przykładzie czterech bajtów. Czy powinny być w kolejności 1-2-3-4 czy też 4-3-2-1 Kolejność bajtów - Endian big endian big end first, grubokońcowość 4-3-2-1 naturalna kolejność procesory SPARC, Motorola 68000, PowerPC little endian little end first, cienkokońcowość kolejność 1-2-3-4 kolejność operacji (przeniesienia) procesory Intel x86, AMD64 middle-endian (historyczny) kolejność 2-1-4-3 (lub 3-4-1-2) szerokość szyny danych a procesor! DEC PDP-11
Liczby całkowite Liczby całkowite bez znaku 32 bity [0 4294967295] 64 bity [0 18446744073709551615] ze znakiem 32 bity [ 2147483648 2147483647] 64 b. [ 9223372036854775808 9223372036854775807] 10! = 3628800 (7cyfr) 15! = 1307674368000 (14 cyfr, większe iż MAX INT ) ( ) 15 = 15! 15 14 11 = = 360360 = 3003 10 10! 5! 5! 120 Zegar
Arytmetyka liczb całkowitych a b = c mod(max INT + 1) Matematyka a komputer Z punktu widzenia matematyki jest obojętne w jaki sposób obliczamy wartość, w przypadku użycia komputera sposób obliczania nie jest obojętny!!
Liczby całkowite 120! = 6 689 502 913 449 127 057 588 118 054 090 372 586 752 746 333 138 029 810 295 671 352 301 633 557 244 962 989 366 874 165 271 984 981 308 157 637 893 214 090 552 534 408 589 408 121 859 898 481 114 389 650 005 964 960 521 256 960 000 000 000 000 000 000 000 000 000 6, 69 10 198 (liczba blisko 200-cyfrowa) Liczby rzeczywiste 101.11011 2 = 1 2 2 +0 2 1 +1 2 0 +1 2 1 +1 2 2 +0 2 3 +1 2 4 = 1 4 + 0 2 + 1 1 + 1 1 2 + 1 1 4 + +0 1 8 + 1 1 16 + 1 1 32 = 5.84375 10 0.84375 10 =?? 2 0.84375 2 = 1.6875 1 + 0.6875 0.6875 2 = 1.375 1 + 0.375 0.375 2 = 0.75 0 + 0.75 0.75 2 = 1.5 1 + 0.5 0.5 2 = 1 1 + 0.0
Liczby rzeczywiste 1 5 = 0.2 10 =?? 2 0.2 2 = 0.4 0 + 0.4 0.4 2 = 0.8 0 + 0.8 0.8 2 = 1.6 1 + 0.6 0.6 2 = 1.2 1 + 0.2 0.2 10 = 0.(0011)(0011)(0011)... (0011) 2 Rozwinięcie nieskończone, okresowe!!! (Patriot kontra Scud) Arytmetyka IEEE 754 Zmiennoprzecinkowa arytmetyka koprocesora x87. FPU (Floating Point Unit). Dla linii procesorów x86 od Intel 80486DX FPU został wbudowany do procesora.
Arytmetyka IEEE 754 Dwa rodzaje liczb zmiennoprzecinkowych: pojedynczej precyzji 32 bity float podwójnej precyzji 64 bity double Reprezentacja (ilość bitów) jest taka sama dla procesorów 32 bitowych (obecne Intele, AMD etc.) jak i dla procesorów 64 bitowych (Ithanium AMD64). Zakres dla liczb pojedynczej precyzji obejmuje ±1.18 10 38 do około ±3.4 10 39. Zakres dla liczb podwójnej precyzji obejmuje ±2.2 10 308 do około ±1.8 10 308. Stała Plancka h = 6, 6260693(11) 10 34 J s Arytmetyka IEEE 754 Część ułamkowa (fraction) jest normalizowana tak aby pierwszy bit był jedynką i ta jedynka nie jest zapamiętywana. W konsekwencji nie da się reprezentować w ten sposób wartości 0.0
Arytmetyka IEEE 754 wartości specjalne IEEE 754 ma reprezentację specjalną dla kilku wartości: 0.0 jest reprezentowane przez dwie wartości +0.0 i 0.0, które się różnią! Inf nieskończoność, istnieje zarówno + jak i NaN symbol nieoznaczony, (Not a Number) Arytmetyka IEEE 754 wartości specjalne Po lewej stronie: 1.0/0.0 Inf 1.0/0.0 -Inf 0.0/0.0 NaN Po prawej stronie!!: x =Inf y =NaN x y NaN
Arytmetyka liczb zmiennoprzecinkowych Skończona ilość bitów reprezentacji powoduje, że możemy jedynie reprezentować skończoną liczbę wartości. Skutki: Rozdzielność mnożenia względem dodawania (odejmowania): ( 4 3 1) 3 1 = 4 3 3 3 Punkt przecięcia dwu prostych może nie należeć do żadnej z nich. Dwie proste równoległe mogą się przecinać. { 1x + 3y = 6 1 3 x + 1y = 5