Informatyka I Język ANSI C Kody pozycyjne Wykład 2
Liczby całkowite Interpretacja notacji (xnxn-1xn-2....x1x0)p= = xn•pn + xn-1•pn-1 + xn-2•pn-2 + ... x1•p + x0 Przykład: 15210 = 1•100 + 5•10 +2•1 = 152 1528 = 1•64 + 5•8 + 2 = 106 15216 = 1•256 + 5•16 + 2 = 338 1522 = ERROR!! Wykład 2
Więcej przykładów Dziesiętny (decymalny) Dwójkowy Heksadecy-malny (binarny) Heksadecy-malny Ósemkowy (oktalny) 1 2 10 3 11 4 100 8 1000 9 1001 1010 A 12 1011 B 13 15 1111 F 17 16 10000 20 163 10100011 A3 243 Wykład 2
Procedury zamiany kodów Przejście z kodu dwójkowego na heksadecymalny Grupujemy od końca zera i jedynki w paczki po cztery i wyzna-czamy wartość każdej paczki jako jedną pozycję zapisu Przejście z kodu heksadecymalnego na dwójkowy Każdą cyfrę z zapisu szesnastkowego zamieniamy na liczbę za-pisaną w kodzie dwójkowym na czterech pozycjach Przejście z kodu dwójkowego na ósemkowy Grupujemy od końca zera i jedynki w paczki po trzy i wyznacza-my wartość każdej paczki jako jedną pozycję zapisu Przejście z kodu ósemkowego na dwójkowy Każdą cyfrę z zapisu oktalnego zamieniamy na liczbę zapisaną w kodzie dwójkowym na trzech pozycjach Wykład 2
Algorytm przejścia do kodu o podstawie p dzielimy przekształcaną liczbę przez p dopóki nie uzyskamy 0 zapamiętujemy reszty z kolej-nych dzieleń zapisujemy zapamiętane reszty w kolejności od końca Przykład DEC BIN 163 1 81 40 20 10 5 2 END DEC OCT 163 3 20 4 2 END Wykład 2
Dobrze wiedzieć... Należy znać potęgi dwójki przynajmniej od 21 do 216 oraz 232 = 4 294 967 296 Definicja 1B = 8 bitów = 23 bitów Definicja 1kB=210B=1024B (ca 1000 B) Związek pomiędzy rozmiarem rejestru (adresu) a wymiarem pamięci operacyjnej: 2B =16 bitów 216B=26kB=64kB Wykład 2
Operacje Arytmetyczne Dodawanie Mnożenie 00001011 11 +00000101 +5 00010000 16 1011 11 • 101 • 5 55 1011__ 110111 Mnożenie przez 2 - przesunięcie w lewo z dopisaniem 0 11*2=22 <=> 1011*10=10110 Dzielenie przez 2 - przesunięcie w prawo z wypadaniem najmłodszego bitu 11/2=5 <=> 1011/10=101 Wykład 2
Arytmetyka uzupełnieniowa do dwóch 2's Complementary Arithmetic Jest to sposób na uwzględnienie liczb ujemnych. Specjalny kod zapisu pozwala sprowadzić odejmowanie liczb całkowitych do ich dodawania: x – y = x + (-y) ALGORYTM ZMIANY ZNAKU x -x 1. zamieniamy wszystkie zera na jedynki i odwrotnie 2. Dodajemy 1 Przykład 1 4 -4 00000100 4 11111011 1 0 + 1 Dodajemy 1 11111100 Ponoć –4 ? 00000011 W drugą stronę Hura! Znowu 4! Wykład 2
Najstarszy bit jest bitem znaku Przykłady c.d. Obliczamy wartość wyrażenia 11 – 5. Wszystkie operacje na jednym bajcie. 00000101 5 11111011 -5 WŁASNOŚĆ NOTACJI Najstarszy bit jest bitem znaku 1 – liczba ujemna 00001011 11 + 11111011 + (-5) 00000110 6 Obliczamy wartość wyrażenia 100+90. Wszystkie operacje na jednym bajcie. 01100100 100 + 01011010 + 90 10111110 ?? 190 01000001 1 0 01000010 66 WNIOSEK Wynik obliczeń: 100 + 90 = -66 Ciekawostka: 100 + 90 + 66 =256 = 28 Wykład 2
WŁASNOŚCI KONWENCJI dodajemy 1 Binarnie Bez. 2’s c 00000000 00000001 1 00000010 2 00000011 3 ..................... 01111111 127 10000000 128 -128 10000001 129 -127 ................... 11111110 254 -2 11111111 255 -1 Tabela ma 28 = 256 wierszy (i wartości) Interpretacja zależy od przyjętej konwencji W arytmetyce bez-względnej: 0 255 W arytmetyce uzupeł. do dwóch: -128 127 Na dwóch bajtach można zapamiętać 216 = 65536 wartości Bezwg: 0 65535 2’s: -32768 32767 Wykład 2
LICZBY RZECZYWISTE Zapis w postaci p2m, p – precyzja, m – mantysa; p ma postać 0.1.... w związku z tym trzech początko-wych symboli się nie zapamiętuje bo zawsze są takie same. Zamiast tego zapamiętuje się znak; m jest zwiększane o połowę zakresu, tak aby było zawsze nieujemne; Wniosek: Wcale nie jest tak łatwo pomnożyć liczbę rzeczywistą przez liczbę zapisaną w arytmetyce uzu-pełnieniowej do dwóch (jak się jest komputerem). Wykład 2