Zbiór materiałów do
ćwiczeń rachunkowych
z przedmiotu
„Metodyka i techniki programowania
Cz. I
Formy przedstawiania liczb w komputerze
Cz. II
Algorytmy (w oddzielnym pliku)
Tematy ćwiczeń rachunkowych dla grup stacjonarnych
E4x1S1-E4x6S1
Łącznie: 46 godz.
wykłady- 14 ćwicz. rach. - 8 lab.- 24
Część I
Temat 1: Konwersje i zapis liczb w różnych systemach (2 godz.)
Temat: 2 Kody ZM,U1,U2. Operacje arytmetyczne. (2 godz.)
Część II
Temat: 3 Analiza problemu i specyfikacja algorytmu. (3 godz.)
Temat 5. Kolokwium z tematów 1-3 (1 godz.)
Tematy ćwiczeń rachunkowych dla grup niestacjonarnych
E4x1N1, E4x2N2
Łącznie: 50 godz.
wykłady- 16 ćwicz. rach. - 6 lab.- 26
Część I
Temat 1: Konwersje i zapis liczb w różnych systemach (1 godz.)
Temat: 2 Kody ZM,U1,U2. Operacje arytmetyczne. (1 godz.)
Część II
Temat: 3 Analiza problemu i specyfikacja algorytmu. (3 godz.)
Temat 4. Kolokwium z tematów 1-3 (1 godz.)
INFORMACJE
DOSTĘPNOŚĆ MATLABA
MATLAB jest oprogramowaniem płatnym. Oprogramowanie ma licencję na czas studiów. Dla studentów cena 87 $. Ta wersja zawiera też SIMULINK z niektórymi ToolBox'ami.
Dystrybucja firma: Oprogramowanie naukowo techniczne. Kraków.
WWW.ont.com.pl
Istnieją zbliżone wersje darmowe o nazwach: FreeMat, SCILAB, (SCICOS odpowiednik SIMULINKA dla SCILABA)
Literatura
podstawowa:
W. Reichel, M. Stachurski, Matlab dla studentów, Witcom, Warszawa 2009r.
A. Kamińska, B. Pańczyk, Matlab. Przykłady i zadania, Mikon 2002
B. Mrozek, Z. Mrozek, Matlab i Simulink. Poradnik użytkownika, 2004
B. Mrozek, Z. Mrozek, Matlab. Uniwersalne środowisko do obliczeń naukowo technicznych.
uzupełniająca:
M. Niedziela, Zbiór zadań z informatyki, Helion 2006
Matlab Help Printable documentation
R. Klempka, A. Stankiewicz, Programowanie z przykładami w języku Pascal i Matlab, 2002
W. Regel , Przykłady i ćwiczenia w programie SIMULINK. Wyd. MIKOM 2004
B. Mrozek, Z. Mrozek, MATLAB Leksykon kieszonkowy. Wyd. HELION
Cz. I
REPREZENTACJA LICZB
W KOMPUTERZE
Materiały do ćwiczeń dla studentów
System pozycyjny zapisu liczb
Liczby w zapisie pozycyjnym (np. 32 875) przedstawiane jako łańcuchy cyfr (ci), czyli znaków przypisanych liczbom naturalnym:
ci ∈ {0,1,.., R-1}
Podstawą R pozycyjnego systemu liczenia jest ilość różnych symboli (cyfr) dopuszczalnych na każdej pozycji zapisu liczby.
Natomiast rzeczywista wartość cyfry w liczbie zależy od jej pozycji zajmowanej
w łańcuchu cyfr. Np. cyfra 5 w liczbie 535 co innego znaczy na pozycji pierwszej
i ostatniej. Wartość liczby L jest suma cyfr mnożonych przez wagi odpowiednie dla pozycji, na których te cyfry występują:
(1)
gdzie: i - numery pozycji na lewo od przecinka oddzielającego część całkowitą od części ułamkowej( i=0, 1, ..n),
L(R) -wartość liczby w systemie o podstawie R w którym zapisana jest liczba
Jeśli omawiane są reprezentacje liczb w różnych systemach to podając wartość liczby należy też zaznaczyć notację system np. 101d. Przy zapisie notacji używane są litery bądź cyfry np. 8 -ósemkowy(lub litera q), h- heksadecymalny (szesnastkowy), b-binarny, d-dziesiętny (lub 10) itp.
System dziesiętny- Podstawa R=10 oraz 10 cyfr: ci ∈ {0,1,2,. . . ,9 },
Np. korzystając z wzoru (1) liczbę 32 875 10 można zapisać jako:
3x10000 + 2x1000 + 8x100 + 7x10 + 5x1
3 2 8 7 5
104 103 102 101 100 wagi kolejnych cyfr systemu
W podobny sposób można też przedstawić liczby Lu <1 tzn. liczby ułamkowe:
(2)
gdzie: pozycje położone na prawo od przecinka mają w tej konwencji ujemne:
-1, -2,-3,... wartości wykładnika określającego wagę cyfry
Np. korzystając z (2) liczbę 0,625 można przedstawić jako:
6*10-1 + 2*10-2 + 5*10-3
Korzystając z wzoru (1) można zapisać liczbę w dowolnym systemie tzn. o różnych podstawach R i odczytać jej wartość w systemie dziesiętnym np.: System „8” (237) 8 =2*82 + 3*81 + 7*80=159d
System „4” (233) 4 =2*42 + 3*41 + 3*40= 47d
Reprezentacja liczb całkowitych- kod binarny
Podstawą kodu binarnego jest podstawa R=2. W takim kodzie występują 2 cyfry: 0 i 1. Taki kod jest idealny do zapisu informacji w komputerze, bowiem komputery rozróżniają tylko dwa stany: 0 i 1, które zawiera najmniejsza porcja informacji nazywana bitem [b]. Zwykle stosuje się większą jednostkę bajt [B]. Jeden bajt to 8 bitów. Naturalnym dla komputera systemem zapisu danych jest system dwójkowy (binarny), lecz ze względów technicznych używa się także systemów: szesnastkowego (heksadecymalny) i rzadziej- ósemkowego (oktalny).
Każda liczba L może być zapisana na pewnej ilości n bitów. Ilość n bitów niezbędną do zapisu liczby dziesiętnej L można wyznaczyć z nierówności:
(2n -1) ≥ L (3)
Bitów może być oczywiście więcej niż n. Dlatego liczba n może być zaokrąglona w górę do całkowitej wielokrotności 8- tak, aby była wyrażona w bajtach. Np. jeśli L= 968 to analizując kolejno np. dla n=8, 9 spełnienie relacji (3) nastąpi dopiero dla n=10 bo :
( 210 -1 ) ≥ 968
Czyli minimalna liczba bitów niezbędna dla zapisu liczby 968 to n=10 bitów, zaokrąglając w górę - potrzeba 2 bajty. Oczywiście może być też więcej bitów, wówczas na niewykorzystanych bitach znajdują się zera.
W kodzie binarnym inaczej przedstawiane są liczby całkowite nieujemne,
a inaczej ujemne. Inaczej też zapisuje się liczby ułamkowe.
Natomiast w przypadku liczb rzeczywistych (tzn. posiadających część całkowitą i ułamkową) ich część całkowita jest zapisywana w postaci jednego ciągu bitów a część ułamkowa w postaci drugiego ciągu.
W systemie o R=2 (dwójkowym, binarnym) są dwie cyfry: 0 i 1, a kolejne pozycje z n-pozycji liczby odpowiadają kolejnym potęgom liczby 2.
Np.: dla n= 4 ciąg 1 1 1 0 (2) zawiera liczbę l*23+1*22+l*21+0*20 = 14(10)
Zakładając 1 bajt (tzn. n= 8) to oznaczenia i wagi bitów są następujące:
Nr bitu: b7 b6 b5 b4 b3 b2 b1 b0
27 …….. 23 22 21 20
Wagi bitów: 128 64 32 16 8 4 2 1
Kod o takich wagach jest nazywany naturalnym kodem binarnym - NKB.
Bit bo jest bitem najmniej znaczącym -LSB (least significant bit),
a bit najstarszy tzn. bn-1 - MSB (most significant bit)
Największa liczba zapisana przy pomocy n bitów to Lmax= (2n -1)- stąd dla n=8 Lmax=255 - co odpowiada jedynce na wszystkich bitach bajtu.
Zamiana liczby dziesiętnej ( całkowitej, dodatniej) na binarną- algorytm Hornera
Dana jest liczba naturalna np. 108 zapisana w systemie dziesiętnym. Należy znaleźć jej notację w systemie binarnym.
Sposób rozwiązania (jeden z możliwych):
Należy dzielić całkowicie przez dwa daną liczbę oraz zapisywać resztę
z dzielenia całkowitego. Otrzymane wartości reszt z dzielenia, zapisane w kolejności odwrotnej dają zapis liczby w systemie binarnym. (na końcu
dzielenia otrzymujemy najbardziej znaczącą cyfrę binarną),
Rozwiązanie
Tabela 1. Zamiana liczby z systemu dziesiętnego na dwójkowy
Działanie |
Wynik |
Reszta |
108:2 |
54 |
0 |
54:2 |
27 |
|
27:2 |
13 |
|
13:2 |
6 |
1 |
6:2 |
3 |
0 |
3:2 |
1 |
1 |
1:2 |
0 |
1 |
Sprawdzenie:
1101101(2)*26+l*25+0*24+l*23+l*22+0*21+0*2° = 64+32+8+4 =108(10)
W podobny sposób można odczytać wartość dziesiętną ciągów przedstawiających zapis binarny liczby rzeczywistej (nieujemnej) np.:
(101,101) (2) =1*22 + 0*21 + 1*20 + 1*2-1 + 0*2-2 + 1*2-3 =5,625
Zamiana liczby dziesiętnej ( całkowitej, dodatniej) na binarną
Liczbę całkowitą z systemu dziesiętnego można zamienić na NKB jeśli właściwie oszacujemy niezbędną, minimalną liczbę n bitów (na podstawie nierówności (3))
Przedstawiony dalej algorytm dokonuje zamiany liczby X na postać binarną, dobierając kolejno wagi binarne. Każdorazowo dobiera największą z możliwych wag (stąd zachłanność).
Algorytm zamiany metodą doboru wag
Nadać wszystkim n- bitom wartość 0.
znaleźć najmniejszą wartość n taką, aby zachodziła relacja:
2n +1 > X ≥2n
Nadać bitowi bn wartość bn =1.
3) Obliczyć różnicę Y=X- 2n Czy Y=0 ?
TAK: Przejdz do 4.
NIE: Podstaw X:=Y. Przejdz do punktu 2.
4. Koniec.
Przykład:
Wykorzystując algorytm. Przedstaw w NKB liczbę 88(10).
1. Przyjmujemy początkowo n=8 i X(NKB)= 0 0 0 0 0 0 0 0
2. Szukamy największego n aby 2n+1 > 88 ≥ 2n Dla n=7 jest (27 > 88 > 26).
Czyli największą możliwą wagą jest 26 . Stąd bit b6=1;
3. Zostaje różnica Y=88-64=24 Ponieważ Y>0 to nowa wartość X=24
2. Szukamy największego n aby 2n+1 > 24 ≥ 2n . Dla n=4 jest (25>24> 24 ).
Czyli największą możliwą wagą jest 24 . Stąd bit b4=1;
3. Zostaje różnica Y=24-16=8. Ponieważ Y>0 to X=8
2 Szukamy znów największego n aby 2n+1 > 8 ≥ 2n . Dla n=3 jest (24>8 ≥ 23 ).
Czyli największą możliwą wagą jest 23 . Stąd bit b3=1;
3. Zostaje różnica Y=8 -8=0
Ponieważ Y=0 to punkt 4.
4. KONIEC
Czyli otrzymujemy: 88d= 0 1 0 1 1 0 0 0
Ciągi binarne - podstawowe operacje logiczne
W operacjach logicznych liczba binarna jest traktowana jako zbiór pojedynczych cyfr binarnych.
Operacje na bitach |
|
Negacja (NOT) |
!1 = 0, !0 = 1 |
Koniunkcja (AND) |
0 & 0 = 0, 1 & 0 = 0, 0 & 1 = 0, 1 & 1 = 1 |
Alternatywa (OR) |
0 | 0 = 0, 1 | 0 = 1, 0 | 1 = 1, 1 | 1 = 1 |
Różnica symetryczna XOR |
0 ^ 0 = 0, 1 ^ 0 = 1, 0 ^ 1 = 1, 1 ^ 1 = 0 |
Przykłady:
Operacje arytmetyczne na ciągach binarnych
Dodawanie
Liczby dwójkowe dodajemy podobnie, jak dziesiętne. Gdy po dodaniu dwóch cyfr uzyskuje się wartość niemożliwą do zapisania pojedynczą cyfrą, zachodzi tzw. przeniesienie. Odejmujemy wtedy od wyniku podstawę systemu, a do następnej pozycji dodajemy 1 (np. 9+8=17-10) =7(1)7
W przypadku liczb dwójkowych przeniesienie wystąpi już wtedy, gdy wynik dodawania dwu cyfr jest większy od 1.
Reguły dodawania:
Reguły odejmowania:
Mnożenie i dzielenie
Przykłady
Mnożenie przez 2 w układzie binarnym - przesunięcie liczby o jedną pozycję w lewo i dopisanie zera z prawej strony liczby.
Dzielenie przez 2 w układzie binarnym - przesunięcie liczby o jedną pozycję w prawo i odrzucenie ostatniej cyfry (jeśli liczba parzysta to tą cyfrą jest zero).
Przykład:
Mnożenie przez 10 w układzie dziesiętnym i przez 2 w układzie dwójkowym.
Podobnie mnożenie i dzielenie w układzie dwójkowym przez 4 i inne potęgi dwójki - można realizować jako przesunięcie w lewo (dla mnożenia) lub w prawo (dla dzielenia) o odpowiednią liczbę pozycji.
System oktalny (ósemkowy)
W systemie ósemkowym (R=8) mamy do dyspozycji osiem cyfr (0, 1, 2, ...,7), a kolejne pozycje odpowiadają kolejnym potęgom liczby 8.
Np. 407(8) = 4*82+0*81+7*80 = 4*64+7 = 256+7 = 263(10)
Przykład :
Dana jest liczba naturalna n = 197 zapisana w systemie dziesiętnym. Należy znaleźć jej notację w systemie ósemkowym.
Sposób rozwiązania:
Należy daną liczbę dzielić całkowicie przez osiem oraz zapisywać resztę z dzielenia całkowitego. Wartości reszty z dzielenia, zapisane w kolejności odwrotnej, dadzą liczbę w systemie oktalnym.
Rozwiązanie
Tabela . Zamiana liczby z systemu dziesiętnego na ósemkowy
Działanie |
Wynik |
Reszta |
197:8 |
24 |
|
24: 8 |
3 |
0 |
3:8 |
0 |
3 |
Wynik: 305(8)
Sprawdzenie: 305(8) = 3*82+0*81+5*8° = 3*64+5 = 192+5 = 197(10)
Przykład 1.3. Zamiana liczby oktalnej na binarną.
Dana jest liczba naturalna n = 604(8) zapisana w systemie ósemkowym. Należy znaleźć jej notację w systemie binarnym.
Sposób rozwiązania:
Ponieważ podstawą systemu oktalnego jest liczba 8 (jej zapis wymaga 3 bitów), a potęgą podstawy systemu binarnego 2, można zamieniać reprezentację liczb w tych systemach, zamieniając odpowiadające sobie cyfry (ciągi cyfr).
Tabela. Tabela konwersji z systemu oktalnego na binarny (i odwrotnie)
cvfra oktalna liczba binarna
000
001
010
3 011
4 100
101
110
111
Rozwiązanie
Należy zamienić cyfry z systemu oktalnego na ciągi cyfr w systemie binarnym.
Zamiana z systemu binarnego na ósemkowy wymaga postępowania odwrotnego tzn. podziału na grupy 3 bitowe (od najmłodszego bitu) i przyporządkowania każdej grupie cyfry ósemkowej : 110 000 100(2) 604 (8)
System heksadecymalny
W systemie heksadecymalnym R=16 (szesnastkowym) mamy do dyspozycji 10 cyfr: (0, 1, 2,...,9) oraz sześć liter (A, B, C, D, E, F).
Wartości 10 odpowiada A, 11 B, 12 C, 13 D, 14 E, 15 F. Kolejne pozycje liczby w tym systemie odpowiadają kolejnym potęgom liczby 16.
Np. 5C(h) = 5*161+12*16° = 80+12 = 92(l0)
Przykład: Znaleźć notację heksadecymalną liczby dziesiętnej N = 107.
Rozwiązanie:
Należy daną liczbę dzielić całkowicie przez szesnaście oraz zapisywać resztę z dzielenia całkowitego (reszty 10 i więcej zapisujemy jako cyfry A,B,C,D,E,F).
Tabela . Zamiana liczby 107 z systemu dziesiętnego na szesnastkowy
Działanie Wynik Reszta
107:16 6 (11) czyli B
6:16 0 6
Sprawdzenie: 6 B h=6*161 + 11*160 =96+ 11=107 (10)
Przykład 1.5. Zamiana liczby binarnej na heksadecymalną.
Dana jest liczba naturalna n =10010110011 zapisana w systemie binarnym. Znajdź jej notację w systemie szesnastkowym.
Sposób rozwiązania:
Podstawą systemu jest 16 (24 - co wymaga 4 bitów) a binarnego 2, należy więc podzielić ciąg bitów na grupy 4 bitowe i każdej przyporządkować odpowiednią cyfrę systemu hex (wg tabeli).
Cyfra heksadecymalna |
binarna |
0 |
0000 |
1 |
0001 |
2 |
0010 |
3 |
0011 |
4 |
0100 |
5 |
0101 |
6 |
0110 |
7 |
0111 |
8 |
|
9 |
1001 |
A |
|
B |
1011 |
C |
1100 |
D |
1101 |
E |
1110 |
F |
1111 |
Na liczbach hex można wykonywać typowe operacje np.:
1B8 440
+ C7 199
2 7 F 639Konwersja liczb pomiędzy różnymi systemami
Dla znalezienia wartości dziesiętnej liczby zapisanej w innym systemie pozycyjnym wygodnie jest skorzystać z definicji. W systemie dwójkowym jest to proste, gdyż cyfry 0 lub 1 występujące jako mnożniki wag dają 0 lub wagę, która jest odpowiednią potęgą 2).
Np.: liczba 1 1 0 1 0 1 b ma jedynki na poz. o wagach 1,4,16 i 32, a jej wartość dziesiętna wynosi 1+4+16+32 = 53
Cyfry dwójkowe 1 10 1 0 1
Wagi 25 24 23 22 21 2°
Liczba 0,1101b ma jedynki na pozycjach o wagach równych ½, ¼, i 1/16, - jej wartość dziesiętna wynosi ½+ ¼ + 1/16 =13/16
Cyfry dwójkowe: 0, 1 1 0 1
Wagi 20 , 2-1 2-2 2-3 2-4
W systemach innych niż dwójkowy trzeba wykonać mnożenie; np.
Np. dla liczby: 1BC5h mamy:
Cyfry szesnastkowe |
1 |
B |
C |
5 |
Wartość cyfr |
|
11 |
12 |
5 |
Wagi |
163=4096 |
162=256 |
161 =16 |
16°=1 |
|
|
|
|
|
Czyli liczba 1BC5h = 1x4096 +11x256 +12x16 + 5x1 =7109(10)
Przydatność zapisu szesnastkowego polega głównie na tym, że pozwala on zapisywać w zwięzłej postaci łańcuchy dwójkowe (nie zawsze reprezentujące liczby), które to łańcuchy w sposób naturalny opisują stan urządzeń cyfrowych. Z faktu, że 16 = 24 wynika, że 4 cyfry dwójkowe mogą być zastąpione przez 1 cyfrę szesnastkową.
Konwersja z systemu hexsadesymalnego na binarny lub odwrotnie jest bardzo prosta. To duża zaleta systemu hexsadesymalnego. Wymaga jedynie zastąpienia poszczególnych cyfr szesnastkowych czwórkami bitów (tetradami) lub odwrotnie np.:
1101 |
0 0 1 1 |
1 0 0 1 |
0 1 0 1 |
D |
3 |
9 |
5 |
Kod BCD(Binary Coded Decimal)
Kod dwójkowo - dziesiętny BCD służy do przedstawiania liczb całkowitych bez znaku. W kodzie tym każda cyfra dziesiętna jest zakodowana dwójkowo na 4 bitach, według reguł kodowania binarnego (tabela).
Cyfra dziesiętna |
Kod BCD |
0 |
0000 |
1 |
0001 |
2 |
0010 |
3 |
0011 |
4 |
0100 |
5 |
0101 |
6 |
0110 |
7 |
0111 |
8 |
1000 |
9 |
1001 |
Kodowanie liczb ze znakiem
W układach cyfrowych stosowane są elementy dwustanowe, co wystarcza do odwzorowania zapisu dwójkowego liczb naturalnych bez znaku, (unsigned).
Dla liczb całkowitych (ze znakiem) trzeba dodatkowej umowy co do zapisu znaku, a dla liczb rzeczywistych jest konieczność wskazania miejsca przecinka.
Problem liczb całkowitych (integer) rozwiązuje się za pomocą tzw. kodów liczbowych stałopozycyjnych (fixed point), natomiast liczby rzeczywiste (real) są zapisywane w specjalnych formatach zmiennopozycyjnych (floating point) jako para liczb stałopozycyjnych.
Obecnie powszechnie stosowany jest tzw. kod uzupełnień do 2 -U2 {two's complement), choć używano też kodu uzupełnień do 1 -U1 i kodu znak-moduł ZM {sign-magnitude). We wszystkich tych odwzorowaniach trzeba brać pod uwagę wielkość kodu n (liczbę bitów), ponieważ od tego zależy postać zakodowanej liczby — ta sama liczba może mieć różną postać zależnie od tego, na ilu bitach jest kodowana.
Kody U1,U2,ZM różnią się sposobem zapisu liczb ujemnych.
Liczby dodatnie mają we wszystkich kodach taki sam zapis.
Kody różnią się też, dla tego samego n, zakresem liczb. Przydatność poszczególnych kodów wynika z łatwości (szybkości) wykonywania w nich działań arytmetycznych, a w praktyce - dodawania.
Reprezentacja binarna ujemnych liczb całkowitych
Aby poszerzyć zakres liczb trzeba stosować bit znaku. Jest on cyfrą 0 lub 1 poprzedzająca pozostałe bity ciągu. Przyjęto, że dla liczb ujemnych wartość bitu znaku wynosi zawsze 1. Do zapisu liczb ze znakiem stosuje się kody oznaczane jako: ZM,U1 i U2. Należy podkreślić, że dodatnia liczba dziesiętna x we wszystkich kodach jest reprezentowana tym samym ciągiem bitów, czyli jest wyrażana w naturalnym kodzie binarnym (NKB). Bity o wartości 1 tego ciągu określają wagi, których suma wyraża wartość x.
Natomiast jeśli x jest liczbą ujemną to ciąg bitów przedstawiający x jest w każdym kodzie inny. Jedynym podobieństwem jest występowanie „1” na najstarszym bicie (bicie znaku).
Kod znak- moduł (ZM)
Kod znak- moduł dla liczby x zapisywanej na n bitach jest definiowany następująco:
x jeśli x ≥ 0 - oznacza zapis x w NKB
xZM = (4)
2n-1 +|x| jeśli x < 0 - definicja dla zapisu a ujemnej
Przykład:
Zapisać liczbę -23 w kodzie ZM na n=8 bitach. Korzystając z definicji mamy:
2n-1 =27 =128 1 0000000
|-23|= +0 0010111
1 0010111 -23ZM
Po binarnym dodaniu dwu składników otrzymujemy binarny ciąg 1 0010111 przedstawiający liczbę -23 w kodzie ZM.
W kodzie ZM na bicie MSB jest zapisany znak liczby, a na pozostałych bitach jej moduł. Dla n bitów zakres liczb jest następujący:
[-2n-1 -1 : 2n-1 -1]
Przykładowo dla n=8 w kodzie ZM można zapisać liczby z zakresu: [-127: 127]
W kodzie ZM istnieją 2 postacie zera (ujemne i dodatnie)- co jest wadą kodu.
Kod z uzupełnieniem do jedynki- U1
Kod U1 dla liczby x zapisywanej na n bitach jest definiowany następująco:
x jeśli x ≥ 0 - oznacza zapis x w NKB
xU1 = (5)
(2n -1) - |x| jeśli x < 0 - definicja dla zapisu a ujemnej
Przykład:
Zapisać liczbę -23 w kodzie U1 na n=8 bitach. Korzystając z definicji mamy:
2n -1 =28 -1=255 1 1111111
|-23|= - 0 0010111
1 1101000 -23U1
Po binarnym odjęciu modułu od ciągu jedynek reprezentującego wartość (2n -1), otrzymujemy ciąg 1 1101000 , przedstawiający -23 w kodzie U1.
Wymagane w definicji odejmowanie modułu liczby od ciągu n jedynek jest niczym innym jak uzupełnieniem poszczególnych bitów modułu do jedynki.
Stąd nazwa kodu. Warto zauważyć, że:
zapisując moduł liczby ujemnej a następnie,
negując bit po bicie otrzymujemy liczbę ujemną zapisaną w kodzie U1.
Np. dla liczby x=-23 mamy:
Kod U1 Kod Znak-Moduł
Moduł 0 0010111 Moduł 0 0010111
NOT 1 1101000 - 23U1 ZnM 1 0010111
W kodzie U1 na bicie MSB jest zapisany znak liczby, a na pozostałych bitach jej moduł uzupełniony do „1”. Dla n bitów zakres liczb jest następujący:
[-2n-1 -1 : 2n-1 -1]
Przykładowo dla n=8 w kodzie U1 można zapisać liczby z zakresu: [-127: 127]
W kodzie U1 podobnie jak w ZM istnieją 2 postacie zera (ujemne i dodatnie)- co jest wadą kodu.
Reprezentacja binarna ujemnych liczb całkowitych -kod U2
Standardowo w komputerach stosuje się kod U2 (uzupełnienie do 2).
Liczbę całkowitą x zapisuje się w kodzie U2 na n bitach następująco:
Sposób A wg wzoru:
x jeśli x ≥ 0 - oznacza zapis a w kodzie binarnym (NKB)
xu2 = (6)
2n -|x| jeśli x < 0 - definicja dla zapisu a ujemnej
Przykład:
Zakodować na n=8 bitach liczbę -23.
I sposób wg. wzoru A.
1 etap
Zamieniamy na postać binarną liczby: 2n (czyli 256) i 23.
b8 b7 b6 b5 b4 b3 b2 b1 b0
Wagi bitów: 256 128 64 32 16 8 4 2 1
2n = 1 0 0 0 0 0 0 0 0
22(10) = 0 0 0 1 0 1 1 1
2 etap.
Wykonujemy odejmowanie 2n -|a| :
Pożyczka |
|
1 |
1 |
1 |
1 |
1 |
1 |
1 |
1 |
|
|
Dziesiętnie |
2n |
|
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
256
233NKB |
|23| |
- |
|
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
|
|
-23u2 |
|
|
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
|
|
|
|
b7 |
b6 |
... |
... |
.... |
b2 |
b1 |
b0 |
|
|
gdzie: kolor zielony bit znaku
Jeśli dane tzn. n=8 i a=-23 podstawimy do wzoru (6) to mamy:
2n -|a| =28 -|23| =256-23=233(10)
Czyli liczbie -23 w kodzie U2 odpowiada w NKB liczba dziesiętna 233, co można sprawdzić dekodując ostatni wiersz (potraktowany jako zapis w NKB):
1* 27 + 1* 26 + 1* 25 + 1* 23 + 1*20 = 128+64+32+8+1=233
Liczba 233 jest tu uzupełnieniem modułu liczby ujemnej do liczby 256.
Sposób B
Liczbę całkowitą a zapisuje się w kodzie U2 na n bitach następująco:
a jeśli a ≥ 0
-2(n-1) +x jeśli a < 0 i a >- 2(n-1) , gdzie x ≥ 0 (7)
II sposób wg. wzoru (7).
Pierwszy składnik dla n=8 wynosi -128 i jest to waga bitu znaku.
Stąd dla liczby a=-23 mamy: x=2(n-1) +a=27+(-23)=128-23=105.
Liczba 105 powinna być zapisana na bitach b6 b5 b4 b3 b2 b1 b0
Nr bitu |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
|
waga |
- 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
|
-23u2 |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
|
|
|
-128 |
105 |
= |
-23(10) |
Sposób C
Liczbę całkowitą a zapisuje się w kodzie U2 na n bitach wg następującego algorytmu:
jeśli a ≥ 0 to liczbę a zapisujemy w NKB,
jeśli a < 0 to:
zapisujemy w NKB moduł liczby a,
negujemy bit po bicie (uzupełnienie do U1),
do najmniej znaczącego bitu tzn b0 dodajemy 1.
Przykład:
Zakodować na n=8 bitach liczbę -23.
Ponieważ liczba jest ujemna postępujemy wg punktu II (sposób C).
Nr bitu |
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
waga |
128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
| 23(10) | |
0 |
0 |
0 |
1 |
0 |
1 |
1 |
1 |
Punkt IIa |
Negacja |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
0 |
Wynik punktu IIb |
+ |
|
|
|
|
|
|
|
1 |
Punkt IIc |
Wynik: |
1 |
1 |
1 |
0 |
1 |
0 |
0 |
1 |
Liczba -23(u2) |
W wyniku postępowania bit znaku b7 przyjmuje wartość 1, co oznacza liczbę ujemną.
W tabeli poniżej pokazano liczby charakterystyczne dla 8-bitowego U2 oraz dla porównania ich reprezentacje binarne w kodach: ZM i U1.
n= 8 |
ZM |
|
U2 |
-128 |
|
- |
1 0000000 |
-127 |
1 1111111 |
1 0000000 |
1 0000001 |
-126 |
1 1111110 |
1 0000001 |
1 0000010 |
|
………….. |
……… |
|
-2 |
1 0000010 |
1 1111101 |
1 1111110 |
-1 |
1 0000001 |
1 1111110 |
1 1111111 |
Zero |
0 0000000 1 0000000 |
1 1111111 0 0000000 |
0 0000000 jedna postać |
+1 |
0 0000001 |
0 0000001 |
0 0000001 |
+2 |
0 0000010 |
0 0000010 |
0 0000010 |
|
………….. |
|
|
+126 |
0 1111110 111111111111111 |
0 1111110 |
0 1111110 |
+127 |
0 1111111 |
0 1111111 |
0 1111111 |
Arytmetyka stałoprzecinkowa
W poniższej tabeli przedstawiono operacje dodawania liczb dodatnich przedstawionych w różnych kodach.
Wartości dziesiętne |
Wartości w ZM,U1,U2 (reprezentacje 8-bitowe) |
Wartości w kodzie BCD- 9 bitów: bit znaku + 2 tetrady |
89
+134 |
0 1011001
(1) 0 0000110
(1)- oznacza przeniesienie, czyli, że wynik jest > 128 Zatem wynik jest: 128 + 6 |
0 1000 1001
0 1100 1110 korekcja + 0110 0110
Ostatecznie otrzymujemy: 100 + 3 *10 + 4 bo przeniesienie (1) z II tetrady ma wagę 100 |
Kiedy w kodzie BCD jest korekcja? - gdy po dodaniu wyniki tetrad(y) są większe od liczby 9. Trzeba wtedy do każdej tetrady w której przekroczono zakres kodu BCD dodać liczbę 6.
W kolejnej tabeli przedstawiono odejmowanie liczb w różnych kodach.
War -tości |
Kod ZM (5-bitów) |
U1 |
U2 |
BCD |
9
+ 2 |
0 1001
|
0 1001
+ 1
|
0 1001 +1 1001
W U2 przeniesienie jest ignorowane |
0 1001 - 1 0111 0 0010 |
W kodzie ZM i BCD:
znak liczby wynika ze znaku większego modułu
od większego modułu odejmujemy mniejszy.
W kodzie U1 operacja odejmowania jest zastąpiona operacja dodawania wszystkich pozycji łącznie z bitem znaku i uwzględnieniem powstałego przeniesienia. Oznacza to konieczność korekcji polegającej na dodaniu 1 do najmniej znaczącej pozycji wyniku.
W kodzie U2 podobnie jak w U1 operacja odejmowania jest zastąpiona operacja dodawania wszystkich pozycji łącznie z bitem znaku, ale nie ma potrzeby korekcji. Przeniesienie jest ignorowane. Ten algorytm jest najszybszy.
Operacje dodawania na liczbach ze znakiem (w kodzie U2)
Należy zrealizować operacje:
96 -16 co jest tożsame 96 + (-16)
16 - 96
-16 +(-96)
Ad a) Zamieniamy liczby 96 i -16 na kod U2 i dodajemy te liczby.
Nr bitu |
|
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
waga |
|
znak |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
Przeniesienie |
(1) |
1 |
1 |
|
|
|
|
|
|
Przeniesienie jest ignorowane |
96(u2) |
|
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
|
-16(u2) |
+ |
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
|
Wynik w U2 : |
|
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
80(10) |
W wyniku operacji otrzymujemy wartość w NKB - świadczy o tym wartość bitu b7=0. Przeniesienie (1) przekracza przyjęty zakres n=8 bitów i jest ignorowane.
Ad b) Zamieniamy liczby 16 i -96 na kod U2 i dodajemy.
Nr bitu |
|
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
waga |
|
znak |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
Przeniesienie |
|
|
|
|
|
|
|
|
|
|
16(u2) |
|
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
|
-96(u2) |
+ |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
|
Wynik w U2: |
|
1 |
0 |
1 |
1 |
0 |
0 |
0 |
0 |
-80(10) |
W wyniku operacji otrzymujemy wartość w U2 bo składniki były w U2. Wartość jest ujemna, bo świadczy o tym wartość bitu b7=1.
Czyli wynik jest: -27+ (wynik w NKB na 6 bitach)=-128+48=-80(10).
Lub inaczej określamy moduł:
28- (wynik z 8 bitów interpretowany w NKB)=256-176=80(10).
Ponieważ o znaku wyniku świadczy b7=1 stąd wynik=-80(10).
Ad c) Zamieniamy liczby -16 i -96 na kod U2 i dodajemy te liczby.
Nr bitu |
|
b7 |
b6 |
b5 |
b4 |
b3 |
b2 |
b1 |
b0 |
|
waga |
|
znak |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|
Przeniesienie |
(1) |
1 |
1 |
|
|
|
|
|
|
|
-16(u2) |
|
1 |
1 |
1 |
1 |
0 |
0 |
0 |
0 |
|
-96(u2) |
+ |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
|
Wynik: |
|
1 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
-112(10). |
W wyniku operacji otrzymujemy wartość ujemną w U2 - świadczy o tym wartość bitu b7=1.
Czyli wynik jest: -27+ (wynik w NKB na 6 bitach)=-128+16=-112(10).
Reprezentacja liczb rzeczywistych
Przy reprezentacji liczb ułamkowych w komputerze nie można formalnie wykorzystać przecinka (bo mogą być tylko zera i jedynki). W praktyce określa się ilość miejsc przeznaczoną na część całkowitą i ułamkową liczby, dzięki czemu wiadomo, jakiej wartości odpowiada dana pozycja. Np. liczba rzeczywista jest reprezentowana na 4 bajtach z czego:
część całkowita to 2 bajty.
część ułamkowa to 2 bajt
Należy także podkreślić, że ułamki z systemu dziesiętnego podaje się w notacji binarnej najczęściej z określoną dokładnością (jako liczby przybliżone). Dokładność ta jest większa od wartości ostatniej pozycji przeznaczonej na zapis liczby. Przedstawiając np. liczbę 0,3 na 5 bitach, zapiszemy ją jako:
0 01001 (2)= 0,28125(10).
Różnica pomiędzy 0,28125 a 0,3 wynosi 0,01875, co jest mniejsze od
2-5 = 0,03125.
Ułamki dodatnie w kodzie binarnym
W systemie dziesiętnym kolejne pozycje po przecinku odpowiadają kolejnym, ujemnym potęgom liczby 10.
0.546 = 5*10-1 + 4*10-2 + 6*10-3
W systemie binarnym kolejne pozycje po umownej pozycji oznaczającej położenie przecinka oznaczają kolejne ujemne potęgi liczby 2. Aby w zapisie uwidocznić, że jest to ułamek stosuje się czasem poprzedzającą spację. Np.:
,1011 = 1*2-1 + 1*2-3 + 1*2-4 =0.5 + 0.125 +0.0625=0.6875
Czasami też można spotkać zapis z przecinkiem: , 1011
Przykład: Zapisać w kodzie binarnym liczbę 0,1875
Działanie |
Wynik |
Cz. Ułamk. |
Cz. Całk. |
0,1875*2 |
0,375 |
0,375 |
0 |
0,375*2 |
0,75 |
0,75 |
|
0,75*2 |
1,5 |
0,5 |
|
0,5*2 |
1 |
0 |
1 |
0 *2 |
0 |
0 |
0 |
itp |
|
|
|
Od chwili gdy mnożymy przez zero zawsze |
Sprawdzenie: 0 0011 = 1*2-3 +1*2-4= 0,125 +0,0625=0,1875
Liczba ułamkowa jest tu reprezentowana dokładnie.
Przykład: Zapisać w kodzie binarnym liczbę 0,1675
Działanie |
Wynik |
Cz. Ułamk. |
Cz. Całk. |
0,1675*2 |
0,335 |
0,335 |
0 |
0,335*2 |
0,67 |
0,67 |
0 |
0,67*2 |
1,34 |
0,34 |
1 |
0,34*2 |
0,68 |
0,68 |
0 |
0,68 *2 |
1,36 |
0,36 |
1 |
0,36 *2 |
0,72 |
0,72 |
0 |
0,72*2 |
1,44 |
0,44 |
1 |
0,44*2 |
0,88 |
0,88 |
0 |
0,88*2 |
1,76 |
0,76 |
1 |
itp |
|
|
|
Tu kolejne bity wnoszą dodatkową informację, bo |
Tu reprezentacja liczby 0,1675 nie jest dokładna i zależy od liczby uwzględnionych bitów.
Liczba bitów |
Wartość zapisana |
Różnica Δ |
4 |
0,125 |
0.0425 |
5 |
0,15625 |
0,01125 |
6 |
0,15625 |
0,01125 |
7 |
0,16406 |
0,00344 |
itp |
|
|
Przy uwzględnianiu n bitów różnica Δ między wartością zapisaną a rzeczywistą spełnia nierówność:
Δ < 2-n
Np. dla n=4 Δ = 0.0425 <2-4 (bo 0.0425 <0,0625)
Wniosek:
Liczby ułamkowe mogą nie być dokładnie reprezentowane przez rozwinięcie binarne,
Większa liczba bitów zapewnia generalnie większą dokładność przybliżenia ułamka.
Np.: Dla liczby
0,1875 =0 0011
Wystarczą 4 bity na dokładne reprezentowanie ułamka.
Zapis liczby rzeczywistej bez znaku w kodzie binarnym
Przykład: Zapisać w kodzie binarnym liczbę 34,75(10)
Tabela Zamiana liczby 34 NKB
Działanie |
Wynik |
Reszta |
34 :2 |
17 |
|
17 : 2 |
8 |
1 |
8 : 2 |
4 |
|
4: 2 |
2 |
0 |
2:2 |
1 |
0 |
1:2 |
0 |
1 |
Tabela Zamiana liczby 0,75 na kod bin.
Działanie |
Wynik |
Cz. Ułamk. |
|
0,75 *1 |
1,5 |
0,5 |
1 |
0,5 *2 |
1 |
0 |
1 |
100010 11
Stąd dodatnią liczbę rzeczywistą 34,75(10) można zapisać binarnie jako:
34,75(10) = 100010 11
Sprawdzenie: 25 +21 +2-1 +2-2 =32 +2 +0.5 + 0.25= 34,75
Reprezentacja ułamków w kodzie U2
Kod U2 umożliwia reprezentację zarówno dodatnich jak i ujemnych liczb rzeczywistych. Stosowany jest powszechnie bowiem ułatwia operacje matematyczne.
Ułamki dodatnie w kodzie U2 zapisuje się w postaci ciągu bitów o wartościach 0 lub 1 w którym jedynki wskazują na kombinacje wag, które po zsumowaniu tworzą liczbę ułamkową . Wagi są kolejnymi ujemnymi potęgami liczby 2 zaczynając od n= -1.
Ułamki ujemne w kodzie U2 koduje się wg wzoru:
2 -X' gdzie: X' - notacja binarna ułamka dodatniego
Przykład: Zapisać w U2 X=-0,1875
Etap 1. Określenie wartości binarnej X'
Działanie |
Wynik |
Cz. Ułamk. |
|
0,1875*2 |
0,375 |
0,375 |
|
0,375 *2 |
0,75 |
0,75 |
0 |
0,75 *2 |
1,5 |
0,5 |
1 |
0,5 *2 |
1 |
0 |
1 |
Etap 2 Odjęcie binarne 2 -X'
Pożyczka |
|
1 |
1 |
1 |
1 |
1 |
|
2 |
|
1 |
0 , |
0 |
0 |
0 |
0 |
X' |
- |
|
0 |
0 |
0 |
1 |
1 |
-0,1875(U2) |
|
|
1 |
1 |
1 |
0 |
1 |
wagi |
|
|
|
2-1 |
2 -2 |
2-3 |
2-4 |
Pola na prawo od kolorowej linii oznaczają bity części ułamkowej.
Jak sprawdzić poprawność otrzymanej wyżej reprezentacji tzn. że :
-0,1875(U2) = 1 1101 ?.
Można obliczyć 2- |-0. 1875|=1.8125
Czyli powinna być zakodowana w NKB liczba 1.8125. Część całkowita jest tu równa 1, a w interpretacji zapisu jako liczby w U2 ta „1” symbolizuje znak.
Można też sprawdzić poprawność otrzymanej wyżej reprezentacji tzn. że :
-0,1875(U2) = 1 1101
wykonując binarne odejmowanie 2 -X'' (gdzie X'' jest otrzymanym zapisem binarnym ułamka X w kodzie U2)
Pożyczka |
Operacja |
1 |
1 |
1 |
1 |
1 |
|
2 |
|
1 |
0 , |
0 |
0 |
0 |
0 |
X' |
- |
|
1 |
1 |
1 |
0 |
1 |
|-0,1875| |
= |
|
0 |
0 |
0 |
1 |
1 |
Sprawdzenie: 1* 2-3 + 1*2-4 = 0,125 +0,0625 = 0, 1875
Czyli otrzymany tu wynik jest modułem kodowanego ułamka.
Reprezentacja liczb rzeczywistych w kodzie FP2
W kodzie FP2 (floating point- kod zmiennoprzecinkowy) liczba jest zapisywana w postaci w2ykłaqdniczej tzn. wg wzoru:
L=(-1)S •m • PC
gdzie: P- podstawa systemu liczenia, m- mantysa, c- cecha
s- wartość bitu znaku („1” -oznacza +, „0”- znak -)
Poniższa tabela przedstawia strukturę 16 bitowego kodu FP2:
|
znak |
cecha |
mantysa |
|||||||||||||
bit |
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
waga |
s |
-16 |
8 |
4 |
2 |
1 |
2-1 |
2-2 |
2-3 |
2-4 |
2-5 |
2-6 |
2-7 |
2-8 |
2-9 |
2-10 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Przykład 1
Przedstawić liczbę 125.75 w kodzie FP2.
Szukamy n takiego, że 125.75<2n i mnożymy liczbę przez 2n i bierzemy część całkowitą liczby.
125.75 * 27 = 125.75*128=16096 (liczba parzysta)
16 096 : 2 |
0 |
8 048 : 2 |
0 |
4 024 : 2 |
0 |
2 012 : 2 |
0 |
1 006 : 2 |
0 |
503 : 2 |
|
251 : 2 |
1 |
125 : 2 |
1 |
62 : 2 |
0 |
31 : 2 |
1 |
15 : 2 |
1 |
7 : 2 |
1 |
3 : 2 |
1 |
1 : 2 |
1 |
0 |
|
Otrzymujemy:
1 1 1 1 1 0 1 , 1 1 0 0 0 0 0 czyli 125,75
Przesuwamy przecinek w lewo, tak aby był po najbardziej znaczącej jedynce -tu o 6 miejsc :
1 , 1 1 1 1 0 1 1 1 0 0 0 0 0 cecha będzie 26
L= (1 + 0.96484375)* 26 =125,75
Czyli liczbę w FP2 możemy zapisać następująco:
125,75 = (0 00110 1111011100)FP2
L= (1 + 0.96484375)* 26 =125,75
Wartość liczby L jest w tym przypadku dokładna, ale w ogólnym przypadku liczba jest przedstawiana z pewnym przybliżeniem.
Dekodowanie liczby zapisanej w kodzie FP2
Rozkodujemy teraz z powrotem liczbę w kodzie FP2 z pierwszego przykładu tzn:
(0 01010 1111000000)FP2
Posłuży do tego przedstawiona wcześniej w tabelce struktura kodu FP2.
Rozpatrując kolejne elementy, otrzymujemy:
s = 0, a więc mamy: (-1)0
m = 1111000000, a więc mamy: 2-1 + 2-2 + 2-3 + 2-4
c = (01010)U2 = 10, a więc mamy 210
Składając to razem zgodnie z wzorem, otrzymujemy:
(-1)0 * (20 + 2-1 + 2-2 + 2-3 + 2-4) * 210 =210 + 29 + 28 + 27 + 26 = 1024 + 512 + 256 + 128 + 64 = 1984
Widać tu, że zakodowanie liczby w takim a nie innym systemie FP2, za pomocą określonej ilości bitów przeznaczonych na cechę i na mantysę spowodowało ograniczenie dokładności do pewnej liczby miejsc po przecinku (tym już przesuniętym). Stąd utrata dalszej części liczby.
Arytmetyka zmiennoprzecinkowa
Operacje arytmetyczne na liczbach zmiennoprzecinkowych wykonywane są zgodnie z regułami, z tym że wynik zapisywany jest również w postaci cecha - mantysa.
Jeżeli (np. w systemie dziesiętnym P=10) określimy dwie liczby A i B tak, że :
oraz
oraz przyjmiemy, że
to:
Np.: A=2230 = 0,223E4
B=125 =0,125E3
CA > CB d= CA -CB =4-3=1
A+B=(0,223E4+0.125)E3 =(2,23+0,125)E3 =2,355E3 =0,2355 E4
W podobny sposób możemy zapisywać operacje dodawania, odejmowania, mnożenia i dzielenia jeśli przyjmiemy, że podstawą jest P=2 a nie 10 -jak powyżej.
Kodowanie informacji tekstowej
Do kodowania informacji tekstowej wykorzystuje się
kod ASCII (American Standard Code for Information Interchange). W tym kodzie znaki są:
zapisywane w jednym bajcie, można w ten sposób zakodować 256 różnych znaków
ASCII obejmuje:
- 26 małych liter alfabetu łacińskiego
- 26 dużych liter alfabetu łacińskiego
- 10 cyfr
- spacje
- znaki specjalne, np. ! "#$% &
- znaki sterujące (kody ASCII od 0 do 31), np. przejdź do nowego wiersza (oznaczenie LF od Line Feed), powrót karetki do początku wiersza (CR, od słów Carriage Return), tabulator, koniec tekstu (EOT, od słów End of Text)
kody ASCII powyżej 127 to tzw. zestaw rozszerzony; zapisuje się w nim znaki narodowe i znaki semigrafiki symbole np. pozwalające tworzyć na ekranie ramki itp.)
Obecnie do użytku wprowadzany jest nowy sposób kodowania znaków o nazwie UNICODE. Jest to 16-bitowy standard, w którym jest miejsce na wszystkie alfabety narodowe, dotychczas jeszcze niezbyt powszechny. W przyszłości pozwoli on na uniknięcie niedogodności związanych z ograniczoną pojemnością kodu ASCII i koniecznością instalowaniem stron kodowych.
Tabela. Kody znakowe ASCII
Dec Hex Bin Znak |
Dec Hex Bin Znak |
Dec Hex Bin Znak |
0 00 0000000 NUL ' 0' 1 01 0000001 SOH 2 02 0000010 STX 3 03 0000011 ETX 4 04 0000100 EOT 5 05 0000101 ENQ 6 06 0000110 ACK 7 07 0000111 BEL '\a' 8 08 0001000 BS '\b' 9 09 0001001 HT '\t' 10 0A 0001010 LF '\n' 11 0B 0001011 VT '\v' 12 0C 0001100 FF '\f' 13 0D 0001101 CR '\r' 14 0E 0001110 SO 15 0F 0001111 SI 16 10 0010000 DLE 17 11 0010001 DC1 18 12 0010010 DC2 19 13 0010011 DC3 20 14 0010100 DC4 21 15 0010101 NAK 22 16 0010110 SYN 23 17 0010111 ETB 24 18 0011000 CAN 25 19 0011001 EM 26 1A 0011010 SUB 27 1B 0011011 ESC 28 1C 0011100 FS 29 1D 0011101 GS 30 1E 0011110 RS 31 1F 0011111 US 32 20 0100000 spacja 33 21 0100001 ! 34 22 0100010 `` 35 23 0100011 # 36 24 0100100 $ 37 25 0100101 % 38 26 0100110 & 39 27 0100111 ' 40 28 0101000 ( 41 29 0101001 ) 42 2A 0101010 * |
43 2B 0101011 + 44 2C 0101100 , 45 2D 0101101 - 46 2E 0101110 . 47 2F 0101111 / 48 30 0110000 0 49 31 0110001 1 50 32 0110010 2 51 33 0110011 3 52 34 0110100 4 53 35 0110101 5 54 36 0110110 6 55 37 0110111 7 56 38 0111000 8 57 39 0111001 9 58 3A 0111010 : 59 3B 0111011 ; 60 3C 0111100 < 61 3D 0111101 = 62 3E 0111110 > 63 3F 0111111 ? 64 40 1000000 @ 65 41 1000001 A 66 42 1000010 B 67 43 1000011 C 68 44 1000100 D 69 45 1000101 E 70 46 1000110 F 71 47 1000111 G 72 48 1001000 H 73 49 1001001 I 74 4A 1001010 J 75 4B 1001011 K 76 4C 1001100 L 77 4D 1001101 M 78 4E 1001110 N 79 4F 1001111 O 80 50 1010000 P 81 51 1010001 Q 82 52 1010010 R 83 53 1010011 S 84 54 1010100 T 85 55 1010101 U |
86 56 1010110 V 87 57 1010111 W 88 58 1011000 X 89 59 1011001 Y 90 5A 1011010 Z 91 5B 1011011 [ 92 5C 1011100 \ '\\' 93 5D 1011101 ] 94 5E 1011110 ^ 95 5F 1011111 _ 96 60 1100000 ` 97 61 1100001 a 98 62 1100010 b 99 63 1100011 c 100 64 1100100 d 101 65 1100101 e 102 66 1100110 f 103 67 1100111 g 104 68 1101000 h 105 69 1101001 i 106 6A 1101010 j 107 6B 1101011 k 108 6C 1101100 l 109 6D 1101101 m 110 6E 1101110 n 111 6F 1101111 o 112 70 1110000 p 113 71 1110001 q 114 72 1110010 r 115 73 1110011 s 116 74 1110100 t 117 75 1110101 u 118 76 1110110 v 119 77 1110111 w 120 78 1111000 x 121 79 1111001 y 122 7A 1111010 z 123 7B 1111011 { 124 7C 1111100 | 125 7D 1111101 } 126 7E 1111110 ~ 127 7F 1111111 DEL |
Reprezentacja kolorów i kodowanie grafiki
Reprezentacja kolorów
Różne częstości światła widzialnego mają różne barwy.
Każdą z nich można uzyskać łącząc 3 kolory: czerwony, zielony i niebieski (system RGB).
RGB jest stosowany w telewizji i na monitorach komputerowych.
Do druku stosuje się system odbiciowy. Biały papier odbija wszystkie barwy, czarny pochłania wszystkie. Barwniki pochłaniają wybrane barwy, odbijają pozostałe.
System CMY: barwniki cyan (sinoniebieski), magenta (purpurowy), yellow żółty).
Suma C+M+Y teoretycznie daje barwę czarną, ale w praktyce jest to nieładny, ciemnobrązowy kolor. Dlatego stosuje się CMYK (dodatkowo czarny barwnik), ale obrazy kodowane w CMYK'u nie wyglądają ładnie monitorze.
Kodowanie grafiki 2D
Grafika rastrowa:
obraz złożony z kropek (pikseli), zwany bitmapą,
barwa każdego piksela kodowana na określonej ilości bitów,
8 bitów - 256 kolorów, 16 bitów - 65536 kolorów, 24 bity - 16.8 milionów kolorów (tzw. true color),
większa ilość bitów stosowana wtedy, gdy obraz ma podlegać obróbce (np. wydobyciu niewidocznych szczegółów)
przy powiększaniu rozmiarów bitmapy jakość się pogarsza,
formaty rastrowe: GIF, PNG, JPEG, TIFF,
GIF (Graphics Interchange Format), 8 bitów, bezstratna kompresja
umożliwia animację, (ale tylko 256 kolorów),
tworzenie GIF-ów wymaga opłat licencyjnych, dlatego stworzono format zastępczy: PNG (Partable Network Graphics)
PNG koduje obrazy na 1-49 bitach, bezstratna kompresja
JPEG (Joint Photographic Experts Group)-zaletą jest 24 bitowe kodowanie oraz kompresja z utratą danych (im gorsza jakość, tym mniejszy plik wynikowy; w praktyce stosuje się parametr jakości 75, JPEG może zapisać kolory w systemie RGB lub CMYK;
Grafika wektorowa:
Obraz złożony z wektorów (odcinek kodują współrzędne początku, końca i barwa),
okrąg: współrzędne środka, promień i barwa
grafikę wektorowa można przeskalowywać (oraz deformować) bez utraty jakości,
rysunek w formacie wektorowym zajmuje znacznie mniej miejsca, niż w postaci bitmapy, ale zdjęcia lepiej jest zapisywać jako bitmapy,
programy pracujące z bitmapami często nazywają się malarskimi (np. PaintShopPro), a z grafiką wektorową - rysunkowymi (np. CorelDraw);
Grafika 3D
Jest rzedstawiana na płaszczyźnie jako rzut 3 wymiarowej sceny; zaawansowane techniki pozwalają na zmianę projekcji, na „poruszanie się” w prezentowanej przestrzeni (np. gry komputerowe, standardem w Internecie jest format VRML (Virtual Reality Markup Language);
Animacja - formaty MPEG, QuickTime, AVI.
2
Wynik:
1101100(2)
Wynik: 305(8)
Wynik:
110000100(2)
6 0 4 (8)
101 000 100
Wynik:
107d = 6 B h
Rozwiązanie:
Należy zamienić czteroelementowe ciągi cyfr z systemu binarnego na cyfry w systemie heksadecymalnym.
0100 1011 0011
4 B 3
Wynik:
4B3
a=
Wynik:
0,1875 =0 0011
Tu wystarczą 4 bity na część ułamkową !
Wynik:
Część całkowita liczby 34,75(10)
34(10)= 1 0 0 0 1 0
Wynik:
Część ułamkowa liczby 34,75(10)
0,75= 0 11
,
X' =0 0011
Jest różnica na najmłodszym bicie!!!
Pierwsze 7 bitów - to część całkowita, dalsze 7 ułamkowa
Ale to jest dopiero reprezentacja binarna liczby ułamkowej a nie liczby w kodzie FP2!!!
0.96484375
mantysa=0.96484375
cecha= 6
Składnik 20 odpowiada jedynce przed przecinkiem, którą zapamiętaliśmy i nie zapisaliśmy w zakodowanej liczbie, oszczędzając jeden bit. Nie wolno o niej zapomnieć podczas rozkodowania liczby.
Precyzja liczby zapisanej w kodzie FP2 zależy od ilości bitów przeznaczonych na mantysę
Zakres liczby zależy od ilości bitów przeznaczonych na cechę.