Pojęcie liczebności Wstęp do informatyki Podstawy arytmetyki komputerowej Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki Naturalna zdolność człowieka do postrzegania liczebności nie przekracza 3 lub 4. Aby określić liczebność bardziej licznych zbiorów trzeba uŝywać pojęć abstrakcyjnych liczebników. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 2 Liczenie bez liczebników Zapis liczb Egipt 3000-000 p.chr. Budowa ludzkiego ciała dostarczyła pierwszych narzędzi ułatwiających liczenie. We współczesnych językach, nazwy niektórych liczebników pochodzą bezpośrednio od nazw części ciała. Indie 2500-700 p.chr. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 3 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 4
Grecja 500-200 p.chr. Zapis liczb Zapis liczb Licja (Azja Mniejsza) 500-0 p.chr. Cywilizacja Majów 300-400 A.D. Cywilizacja Etruska 600-400 p.chr. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 5 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 6 Systemy liczbowe Addytywne: najprostsze i najstarsze liczba jest sumą symboli (później cyfr) łatwe dodawanie i odejmowanie trudne mnoŝenie i dzielenie Pozycyjne współcześnie w uŝyciu liczba jest sumą cyfr z wagą pozycji koncepcja symbolu pustego zera proste, -, *, / i inne System addytywny X=VV=IIIIIIIIII, V=IIIII, I= Cyfra (symbol) ma swoją stałą wartość liczba pozycja cyfry X X X I I I 6 5 4 X 6 = X 5 = X 4 = dziesięć Pozycja cyfry nie ma znaczenia X X X I I I = XXXIII = 0 Wartość liczby jest sumą cyfr (istnieją drobne modyfikacje tej zasady) 3 2 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 7 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 8 2
Zero 2 3 4 5 6 7 8 9 0? 0 2 3 4 5 6 7 8 9 Liczba cyfr wyznacza tzw. podstawę systemu liczbowego (np.0). Liczby większe wymagają zapisu w postaci kombinacji cyfr o róŝnych wagach - wielokrotnościach podstawy. Cyfra 0 ma znaczenie szczególne symbolizuje brak cyfry na określonej pozycji, zaznaczając jednocześnie tę pozycję Liczba 0 - w kaŝdym systemie pozycyjnym oznacza pierwszą liczbę złoŝoną liczba pozycja cyfry System pozycyjny 3 4 4 3 3 2 Pozycja cyfry ma (!) znaczenie 34 = 0 3 3 0 2 4 0 0 0 Wartość liczby jest sumą cyfr pomnoŝonych przez wagę połoŝenia (potęgę podstawy sytemu) 0 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 9 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 0 np. System pozycyjny a m a m-... a 2 a a 0 a m b m a m- b m-... a b a 0 b 0 system dziesiętny: 0 2 3 4 5 6 7 8 9 234 = *0 3 2*0 2 3*0 4*0 0 (dziesiętnie) system ósemkowy: 0 2 3 4 5 6 7 207 = *8 3 2*8 2 0*8 7*8 0 (dziesiętnie) b podstawa m...0 pozycja system szesnastkowy: 0 2 3 4 5 6 7 8 9 A B C D E F a2f5 = 0*6 3 2*6 2 5*6 5*6 0 (dziesiętnie) Hex Dec 0 0 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 System szesnastkowy (heksadecymalny) Hex Dec A 0 B C 2 D 3 E 4 F 5 0 h = 6 9 h = 25 A h = 26 52 h = 82 00 h = 256 BABA h = 47802 F4240 h = 000000 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 2 3
System dwójkowy (binarny) Najprostszy z moŝliwych: cyfry 0 i Do zapisu liczb moŝna uŝywać nie tylko cyfr, ale wszystkich dwu-stanowych zjawisk: dźwięk krótki i długi: alfabet Morse a kolor czarny i biały: kody paskowe napięcie wysokie i niskie: liczby w komputerach Zapis liczb za pomocą tylko dwu cyfr jest najbardziej odporny za zakłócenia, gdyŝ liczby zapisuje się za pomocą dwóch skrajnie róŝnych stanów, bez Ŝadnych stanów pośrednich fundament niezawodności techniki cyfrowej. System dwójkowy (binarny) cyfra dwójkowa 0 lub bit (binary digit) liczba n-bitowa: a n-... a a 0 a n- 2 n-... a 2 a 0 2 0 0 b = *2 2 0*2 *2 0 = 4 = 5 d 0000 b = 2 7 2 4 2 3 2 0 = 2888 = 53 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 3 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 4 Naturalny kod binarny NKB Naturalny kod binarny, to zapis liczby dwójkowej a n-... a a 0, której wartość oblicza oblicza się według wzoru: a n- 2 n-... a 2 a 0 2 0 Bajty i słowa Liczby dwójkowe mogą mieć dowolną długość, ale w systemach komputerowych przyjęły następujące standardy długości liczb: 8-bitów 6-bitów 32-bity Bajt (Byte), B Słowo (Word), W Długie słowo (Long Word), L Double Zakresy liczb dwójkowych (w NKB) są następujące: Bajt: 0... 2 8 - = 0... 255 Słowo: 0... 2 6 - = 0... 65535 D.słowo: 0... 2 32 - = 0... 247483647 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 5 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 6 4
Kilo, Mega, Giga... (w informatyce) Liczby dwójkowe do zapamiętania W systemie jednostek SI: k = 000, M=000k, G=000M W systemach pamięci komputerowych najmniejsza porcja danych to Bajt = B (8-bitów, 8b). Pojemności pamięci mierzy się więc powszechnie w tej jednostce, tj. jako wielokrotność B. kb = 2 0 B = 024B MB = 2 0 kb = 024kB GB = 2 0 MB = 024MB Twardy dysk: 40GB Marketing vs Informatyka 37.2GB Dec Bin Hex 0 0000 0 000 2 000 2 3 00 3 4 000 4 5 00 5 6 00 6 7 0 7 Dec Bin Hex 8 000 8 9 00 9 0 00 A 0 B 2 00 C 3 0 D 4 0 E 5 F Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 7 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 8 np. Przeliczanie Dec Bin(NKB) Przeliczanie liczb dziesiętnych na dwójkowe polega na rozkładzie liczby na sumę potęg liczby 2, i zapisie na pozycji równej wartości danej potęgi. 2 4 8 6 32 64 28 256 52 024 29 = 28 = 2 7 2 0 = 000000 b 43 = 28 8 4 2 = 0004 b 77 = 64 8 4 = 0000 b 7 = 6 = 000000 b Przeliczanie Bin(NKB) Dec Przeliczanie liczb dwójkowych na dziesiętne polega na sumowaniu potęg liczby 2 odpowiadających pozycjom w liczbie dwójkowej. 000000 b = 2 7 2 0 = 28 = 29 000000 b = 6 = 7 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 9 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 20 5
Przeliczanie Dec Hex 3F8 h = 3*6 2 5*6 8*6 0 = 768 240 8 = 06 375 = *256 7*6 7 = *6 2 7*6 7*6 0 = 77 h Przeliczanie Bin(NKB) Hex Przeliczanie liczb dwójkowych na szesnastkowe (lub odwrotnie) polega na zamianie kaŝdych 4 cyfr dwójkowych na odpowiednią cyfrę heksadecymalną. 00 0 5 A 9 D 00 00 W dzisiejszych czasach... najlepiej skorzystać z kalkulatora 00 00 000 0 b = 5A7 h Liczby szesnastkowe ułatwiają posługiwanie się duŝymi liczbami dwójkowymi Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 2 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 22 Dodawanie liczb dwójkowych (NKB) bit przeniesienia (carry) 00000 (48) 000 ( 79) 000 (227) 000 (58) 00000 (00) 0000000 ( 2) 258>255!! Uwaga na przekroczenie zakresu liczby Odejmowanie liczb dwójkowych W kaŝdym systemie liczbowym: X Y = X ( Y) oraz X X = X ( X) = 0 Odejmowanie liczb najłatwiej zrealizować jako dodawanie liczby ujemnej. Potrzebny jest zatem sposób zapisu liczb ujemnych. (NKB nie pozwala na zapis liczb ujemnych) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 23 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 24 6
Liczby ujemne kod Znak-Moduł Kod Znak-Moduł (ZM): niech najstarszy bit oznacza znak liczby minus, 0 - plus 00000 = -9 znak moduł (NKB) System ZM nie pozwala na proste wykonywanie dodawania liczb ujemnych w praktyce nie jest juŝ stosowany. 000000 (65) 000000 (-) 00000 (-66!) Liczby ujemne Uzupełnienie Jedynkowe Uzupełnienie jedynkowe (U): negacja bitów 000000 ( 65) 00 (-65) ( -0?) 000000 (65) 0 (-) 00 (63!) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 25 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 26 Liczby ujemne Uzupełnienie Dwójkowe Uzupełnienie dwójkowe (U2):. negacja bitów 2. dodanie liczby np. aby zapisać liczbę 39 w kodzie U2: 0000 (39) 0000 U 0000000 000 (-39) sprawdzenie: 0000 (39) 000 (-39) 00000000 Kod U2 Kod uzupełnienia dwójkowego (U2), to zapis liczby dwójkowej a n-... a a 0, której wartość oblicza oblicza się według wzoru:- a n- 2 n- a n-2 2 n-2... a 2 a 0 2 0 znak minus (-) przy największym składniku Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 27 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 28 7
2 n- (bit znaku) U2 c.d. a n- a n-... a a 0 moduł (NKB) = - 2 7 moduł (NKB) 28 27 = ( -) 0000000 () 00000000 ( 0) (-) (-) 0 (-2) Liczby U2 zakres Ze względu na postać liczby: a n- 2 n- a n- 2 n-2... a 2 a 0 2 0 zakres liczb w U2 wynosi: 2 n-... 0... 2 n- dla liczb n-bitowych. W szczególności dla bajta (8-bitów) zakres ten wynosi: 2 7... 0... 2 7 28... 0... 27 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 29 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 30 U2 c.d. reprezentacja 8-bitowych liczb w kodzie U2: U2 c.d. -28 = 0000000-27 = 000000-26 = 000000... -2 = 0 - = 0 = 00000000 = 0000000 2 = 0000000... 26 = 00 27 = 0 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 3 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 32 8
Przeliczanie Bin(U2) Dec Przeliczanie ujemnych liczb U2 na dziesiętne polega na dodaniu wartości wagi bitu znaku -2 n- do wartości modułu. 000000 b = -2 7 2 0 = -28 = -27 00000 b = -2 7 6 = -28 7= - Przeliczanie Dec Bin(U2) Przeliczanie ujemnych liczb dziesiętnych na U2 polega odjęciu wartości wagi bitu znaku -2 n-, (czyli dodaniu 2 n- ) od wartości liczby i zapisaniu wyniku jako modułu (w NKB). -20: znak = moduł = -202 7 = -2028 = 8 = 000000 b -20 = 000000 b Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 33 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 34 Działania w kodzie U2 Reguła odejmowania: aby odjąć jedną liczbę (odjemnik) od drugiej (odjemna), oblicz uzupełnienie dwójkowe odjemnika i dodaj do odjemnej. Działania w kodzie U2 Reguła przepełnienia (overflow): przepełnienie (błąd zakresu) występuje podczas dodawania dwóch liczb ujemnych lub dwóch liczb dodatnich, gdy wynik ma znak przeciwny. Rozszerzenie znakowe: aby liczbę n-bitową U2 zapisać na m-bitach (m>n), naleŝy uzupełnić brakujące bity wartością najstarszego bitu (0 lub ) liczby n-bitowej. 0000000 (-28) ( -) 0 ( 27) 0 ( 27) 0000000 ( ) 0000000 (-28) 8-bitowa liczba 99 = 6-bitowa liczba 99 = 000 b 000 b Podczas dodawania liczb przeciwnych znaków przepełnienie nie występuje. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 35 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 36 9
Interpretacja liczb dwójkowych Wartość liczby dwójkowej zaleŝy od interpretacji jej zapisu. Ta sama sekwencja zer i jedynek moŝe oznaczać róŝne liczby. 0000 b = 70 (NKB) 0000 b = -86 (U2) 0000 b = -42 (ZM) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 37 0