Wstęp do informatyki Podstawy arytmetyki komputerowej Cezary Bolek cbolek@ki.uni.lodz.pl Uniwersytet Łódzki Wydział Zarządzania Katedra Informatyki Pojęcie liczebności 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 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. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 3 1
Egipt 3000-1000 p.chr. Zapis liczb Indie 2500-1700 p.chr. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 4 Grecja 500-200 p.chr. Zapis liczb Cywilizacja Majów 300-1400 A.D. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 5 Zapis liczb Licja (Azja Mniejsza) 500-0 p.chr. Cywilizacja Etruska 600-400 p.chr. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 6 2
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 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 7 System addytywny X=VV=IIIIIIIIII, V=IIIII, I=1 Cyfra (symbol) ma swoją stałą wartość liczba pozycja cyfry X X X I I I 6 5 4 3 2 1 X 6 = X 5 = X 4 = dziesięć Pozycja cyfry nie ma znaczenia X X X I I I = XXXIII = 10 Wartość liczby jest sumą cyfr (istnieją drobne modyfikacje tej zasady) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 8 Zero 1 2 3 4 5 6 7 8 9 10? 0 1 2 3 4 5 6 7 8 9 Liczba cyfr wyznacza tzw. podstawę systemu liczbowego (np.10). 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 10 - w kaŝdym systemie pozycyjnym oznacza pierwszą liczbę złoŝoną Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 9 3
System pozycyjny liczba pozycja cyfry 1 3 4 1 1 4 3 1 3 2 1 0 1 1 Pozycja cyfry ma (!) znaczenie 1341 = 1 10 3 3 10 2 4 10 1 1 10 0 Wartość liczby jest sumą cyfr pomnoŝonych przez wagę połoŝenia (potęgę podstawy sytemu) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 10 System pozycyjny a m a m-1... a 2 a 1 a 0 b podstawa m...0 pozycja a m b m a m-1 b m-1... a 1 b 1 a 0 b 0 np. system dziesiętny: 0 1 2 3 4 5 6 7 8 9 1234 = 1*10 3 2*10 2 3*10 1 4*10 0 (dziesiętnie) system ósemkowy: 0 1 2 3 4 5 6 7 1207 = 1*8 3 2*8 2 0*8 1 7*8 0 (dziesiętnie) system szesnastkowy: 0 1 2 3 4 5 6 7 8 9 A B C D E F a2f5 = 10*16 3 2*16 2 15*16 1 5*16 0 (dziesiętnie) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 11 System szesnastkowy (heksadecymalny) Hex Dec 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 Hex Dec A 10 B 11 C 12 D 13 E 14 F 15 10 h = 16 19 h = 25 1A h = 26 52 h = 82 100 h = 256 BABA h = 47802 F4240 h = 1000000 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 12 4
System dwójkowy (binarny) Najprostszy z moŝliwych: cyfry 0 i 1 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. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 13 System dwójkowy (binarny) cyfra dwójkowa 0 lub 1 bit (binary digit) liczba n-bitowa: a n-1... a 1 a 0 a n-1 2 n-1... a 1 2 1 a 0 2 0 101 b = 1*2 2 0*2 1 1*2 0 = 41 = 5 d 10011001 b = 2 7 2 4 2 3 2 0 = 1281881 = 153 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 14 Naturalny kod binarny NKB Naturalny kod binarny, to zapis liczby dwójkowej a n-1... a 1 a 0, której wartość oblicza oblicza się według wzoru: a n-1 2 n-1... a 1 2 1 a 0 2 0 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 15 5
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 16-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-1 = 0... 255 Słowo: 0... 2 16-1 = 0... 65535 D.słowo: 0... 2 32-1 = 0... 2147483647 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 16 Kilo, Mega, Giga... (w informatyce) W systemie jednostek SI: 1k = 1000, 1M=1000k, 1G=1000M W systemach pamięci komputerowych najmniejsza porcja danych to 1Bajt = 1B (8-bitów, 8b). Pojemności pamięci mierzy się więc powszechnie w tej jednostce, tj. jako wielokrotność 1B. 1kB = 2 10 B = 1024B 1MB = 2 10 kb = 1024kB 1GB = 2 10 MB = 1024MB Twardy dysk: 40GB Marketing vs Informatyka 37.2GB Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 17 Liczby dwójkowe do zapamiętania Dec Bin Hex 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 Dec Bin Hex 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 18 6
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 1 na pozycji równej wartości danej potęgi. 1 2 4 8 16 32 64 128 256 512 1024 129 = 128 1 = 2 7 2 0 = 10000001 b 143 = 128 8 4 2 1 = 100011141 b 77 = 64 8 4 1 = 01001101 b 17 = 16 1 = 00010001 b Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 19 Przeliczanie Bin(NKB) Dec Przeliczanie liczb dwójkowych na dziesiętne polega na sumowaniu potęg liczby 2 odpowiadających pozycjom 1 w liczbie dwójkowej. 10000001 b = 2 7 2 0 = 128 1 = 129 00010001 b = 16 1 = 17 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 20 Przeliczanie Dec Hex 3F8 h = 3*16 2 15*16 1 8*16 0 = 768 240 8 = 1016 375 = 1*256 7*16 7 = 1*16 2 7*16 1 7*16 0 = 177 h W dzisiejszych czasach... najlepiej skorzystać z kalkulatora Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 21 7
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ą. 1001 1101 5 A 9 D 0101 1010 0101 1010 0001 0111 b = 5A17 h Liczby szesnastkowe ułatwiają posługiwanie się duŝymi liczbami dwójkowymi Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 22 Dodawanie liczb dwójkowych (NKB) bit przeniesienia (carry) 1 1 1 10010100 (148) 01001111 ( 79) 11100011 (227) 1 1 1 1 1 10011110 (158) 01100100 (100) 100000010 ( 2) 258>255!! Uwaga na przekroczenie zakresu liczby Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 23 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> 24 8
Liczby ujemne kod Znak-Moduł Kod Znak-Moduł (ZM): niech najstarszy bit oznacza znak liczby 1 minus, 0 - plus 10001001 = -9 znak moduł (NKB) System ZM nie pozwala na proste wykonywanie dodawania liczb ujemnych w praktyce nie jest juŝ stosowany. 01000001 (65) 10000001 (-1) 11000010 (-66!) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 25 Liczby ujemne Uzupełnienie Jedynkowe Uzupełnienie jedynkowe (U1): negacja bitów 01000001 ( 65) 10111110 (-65) 11111111 ( -0?) 01000001 (65) 11111110 (-1) 00111111 (63!) 1 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 26 Liczby ujemne Uzupełnienie Dwójkowe Uzupełnienie dwójkowe (U2): 1. negacja bitów 2. dodanie liczby 1 np. aby zapisać liczbę 39 w kodzie U2: 00100111 (39) 11011000 U1 00000001 1 11011001 (-39) sprawdzenie: 00100111 (39) 11011001 (-39) 00000000 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 27 9
Kod U2 Kod uzupełnienia dwójkowego (U2), to zapis liczby dwójkowej a n-1... a 1 a 0, której wartość oblicza oblicza się według wzoru:- a n-1 2 n-1 a n-2 2 n-2... a 1 2 1 a 0 2 0 znak minus (-) przy największym składniku Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 28 U2 c.d. a n-1 a n-1... a 1 a 0 2 n-1 (bit znaku) moduł (NKB) 11111111 = -1 2 7 moduł (NKB) 128 127 = 1 11111111 ( -1) 00000001 (1) 00000000 ( 0) 1 11111111 (-1) 11111111 (-1) 11111110 (-2) 1 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 29 Liczby U2 zakres Ze względu na postać liczby: a n-1 2 n-1 a n-1 2 n-2... a 1 2 1 a 0 2 0 zakres liczb w U2 wynosi: 2 n-1... 0... 2 n-1 1 dla liczb n-bitowych. W szczególności dla bajta (8-bitów) zakres ten wynosi: 2 7... 0... 2 7 1 128... 0... 127 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 30 10
U2 c.d. reprezentacja 8-bitowych liczb w kodzie U2: -128 = 10000000-127 = 10000001-126 = 10000010... -2 = 11111110-1 = 11111111 0 = 00000000 1 = 00000001 2 = 00000010... 126 = 01111110 127 = 01111111 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 31 U2 c.d. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 32 Przeliczanie Bin(U2) Dec Przeliczanie ujemnych liczb U2 na dziesiętne polega na dodaniu wartości wagi bitu znaku -2 n-1 do wartości modułu. 10000001 b = -2 7 2 0 = -128 1 = -127 10010001 b = -2 7 16 1 = -128 17= -111 Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 33 11
Przeliczanie Dec Bin(U2) Przeliczanie ujemnych liczb dziesiętnych na U2 polega odjęciu wartości wagi bitu znaku -2 n-1, (czyli dodaniu 2 n-1 ) od wartości liczby i zapisaniu wyniku jako modułu (w NKB). -120: znak = 1 moduł = -1202 7 = -120128 = 8 = 0001000 b -120 = 10001000 b 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. 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 1) liczby n-bitowej. 8-bitowa liczba 99 = 16-bitowa liczba 99 = 10011101 b 1111111110011101 b Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 35 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. 10000000 (-128) 11111111 ( -1) 01111111 ( 127) 1 01111111 ( 127) 00000001 ( 1) 10000000 (-128) Podczas dodawania liczb przeciwnych znaków przepełnienie nie występuje. Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 36 12
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. 10101010 b = 170 (NKB) 10101010 b = -86 (U2) 10101010 b = -42 (ZM) Wstęp do informatyki Cezary Bolek <cbolek@ki.uni.lodz.pl> 37 13