Arytmetyka liczb całkowitych
Odejmowanie
Reguła odejmowania
W celu realizacji odjęcia od jednej liczby (odjemnej) drugiej liczby (odjemnika)
należy dodać do odjemnej uzupełnienie do dwóch odjemnika.
1/13
Arytmetyka liczb całkowitych
Odejmowanie - przykłady
(5) - (2) = (3)
(2) - (7) = (-5)
M = 510 = 01012
M = 210 = 00102
S = 210 = 00102 -> -210 = 11102
S = 710 = 01112 -> -710 = 10012
0101
0010
+1110
+1001
10011 przeniesienie, bit ignorowany
1011 = -5
0011 = 3
(-6) - (4) = (?)
(-5) - (2) = (-7)
M = -610 = 10102
M = -510 = 10112
S = 410 = 01002 -> -410 = 11002
S = 210 = 00102 -> -210 = 11102
1010
1011
+1100
+1110
10110 przeniesienie, bit ignorowany
11001 przeniesienie, bit ignorowany
0110 przepełnienie
1001 = -7
2/13
Arytmetyka liczb całkowitych
Podsumowanie
Reprezentacje analizowane dotąd można nazwać stało-pozycyjnymi - położenie
przecinka pozycyjnego (binarnego) jest ustalone i z założenia znajduje się on na
prawo od cyfry położonej najdalej na prawo.
Można używać tej samej reprezentacji dla ułamków binarnych, posługując się
skalowaniem liczb, tak że przecinek binarny znajdzie się w innym, wybranym
położeniu.
3/13
Liczby ułamkowe i rzeczywiste
Wymagają one reprezentacji bardziej rozbudowanej. Istnieją dwie jej odmiany:
stałoprzecinkowa, gdzie ustala się położenie przecinka binarnego w
pewnym miejscu, a więc przeznacza się ustaloną liczbę bitów na części
całkowitą i ułamkową liczby. Np., jeśli na część całkowitą przeznaczy się n
bitów, a na część ułamkową k bitów, to reprezentacja jest dana
zależnością:
A = (-2 " bn + 1) " (bn-1 " 2n-1 + ... + b1 " 21 + b0 " 20+
+b-1
" 2-1 + ... + b-k
" 2-k)
Podejście to ma ograniczenia: nie mogą być reprezentowane ani bardzo
duże liczby, ani bardzo małe ułamki. Ponadto, ułamkowe składniki ilorazu
przy dzieleniu dużych liczb mogą być utracone.
zmiennoprzecinkowa, gdzie używa się notacji naukowej w formie:
ąS " BE
gdzie S jest mantysą, B jest podstawą systemu liczbowego (10 dla
dziesiętnego, 2 dla binarnego), a E jest wykładnikiem.
Na przykład, systemie dziesiętnym:
31415000000010 może być reprezentowane jako 0.31415 " 1012
0.0000003141510 może być reprezentowane jako 0.31415 " 10-6.
W tym podejściu przesuwa się przecinek dziesiętny do zadanego położenia
i używa wykładnika do pamiętania położenia tego przecinka.
4/13
Liczby ułamkowe i rzeczywiste
Notacja zmiennoprzecinkowa
Takie samo podejście może być stosowane do liczb binarnych. Mogą one być
przechowywane w postaci słowa binarnego o trzech polach zawierających: znak (plus
lub minus), mantysę S i wykładnik E (podstawa jest ustalona i nie musi być
przechowywana).
Typowy 32-bitowy format zmiennoprzecinkowy:
Lewy bit reprezentuje znak liczby (0 dodatnia, 1 ujemna).
Wartość wykładnika jest przechowywana w bitach 23-30, w postaci
reprezentacji przesuniętej (ustalona wartość przesunięcia jest
odejmowana od pola w celu otrzymania prawdziwej wartości wykładnika).
Tu na 8 bitach przechowuje się liczby z zakresu 0-255; po odjęciu
przesunięcia równego 128, prawdziwe wartości wykładnika mieszczą się w
zakresie 128 do +127.
Mantysa jest zwykle tak obliczona, że cała liczba jest znormalizowana, co
upraszcza operacje. Liczba znormalizowana ma postać:
ą0.1bbb...b " 2E , gdzie b jest dowolną cyfrą binarną.
Wynika z tego, że lewy bit mantysy ma zawsze wartość 1, w związku z tym
nie trzeba go przechowywać, a mantysa ma wartość z przedziału [0.5, 1.0).
5/13
Liczby ułamkowe i rzeczywiste
Notacja zmiennoprzecinkowa
Opisany format pozwala na przedstawienie liczb z zakresów:
ujemnych (-(1 - 2-24) " 2127, -0.5 " 2-128) (-1.7 " 1038, -1.47 " 10-39)
dodatnich (0.5 " 2-128, (1 - 2-24) " 2127) (1.47 " 10-39, 1.7 " 1038)
Powyższe zakresy nie obejmują pięciu obszarów:
liczb ujemnych < -(1 - 2-24) " 2127 (przepełnienie ujemne)
liczb ujemnych > -0.5 " 2-128 (niedomiar ujemny)
liczb dodatnich < 0.5 " 2-128 (niedomiar dodatni)
liczb dodatnich > (1 - 2-24) " 2127 (przepełnienie dodatnie)
zera, które jest opisywane specjalnym wzorem bitowym.
Przepełnienie pojawia się, gdy wynik operacji arytmetycznej przekracza co do modułu
wartość, która może być wyrażona przez wykładnik równy 127.
Niedomiar pojawia się, gdy moduł części ułamkowej jest za mały. Niedomiar jest
mniejszym problemem, ponieważ rezultat może być zwykle przybliżony zerem.
Dodatkowo, liczby zmiennoprzecinkowe nie są równomiernie rozłożone na osi liczbowej
(jak stałoprzecinkowe). Ich gęstość jest największa w okolicy początku osi, a dalej
maleje. Dlatego w wielu przypadkach obliczenia są obarczone błędami zaokrągleń.
6/13
Liczby ułamkowe i rzeczywiste
Standard IEEE dla liczb zmiennoprzecinkowych
Najważniejszy standard reprezentacji liczb zmiennoprzecinkowych - norma IEEE 754.
Została ona stworzona by:
Ułatwić przenoszenie programów między różnymi procesorami
Umożliwić rozwój oprogramowania wymagającego intensywnych obliczeń
numerycznych.
Standard ten definiuje format 32-bitowy (pojedyncza precyzja) i 64-bitowy (podwójna
precyzja), odpowiednio przy 8 i 11 bitowych wykładnikach.
Dodatkowo, standard definiuje 2 formaty rozszerzone (też pojedynczej i podwójnej
precyzji), których format jest zależny od implementacji. Formaty rozszerzone
wprowadzają dodatkowe bity dla wykładnika i mantysy (zwanej fraction).
UWAGA: nie wszystkie wzory bitowe są interpretowane w zwykły sposób niektóre z
nich oznaczają specjalne wartości:
zerowy wykładnik wraz z zerowym ułamkiem oznacza dodatnie lub ujemne
zero, zależnie od bitu znaku
zerowy wykładnik wraz z niezerowym ułamkiem oznacza liczbę
nienormalizowaną
wykładnik o samych jedynkach wraz z zerowym ułamkiem oznacza
dodatnią lub ujemną nieskończoność, zależnie od bitu znaku
wykładnik o samych jedynkach wraz z niezerowym ułamkiem oznacza NaN
(not a number), wartość używaną do sygnalizacji różnych sytuacji
wyjątkowych napotkanych w obliczeniach.
7/13
Liczby ułamkowe i rzeczywiste
Konwersja z postaci dziesiętnej na binarną stałoprzecinkową
Dla reprezentacji stałoprzecinkowej konwersja jest wykonywana oddzielnie dla części
całkowitej i ułamkowej liczby:
1
Konwersja dla części całkowitej jest wykonywana jak dla liczby całkowitej w
reprezentacji znak-moduł
2
Konwersja dla części ułamkowej polega na wykonywaniu mnożenia przez 2. W
kolejnych krokach ułamkowa część liczby dziesiętnej jest mnożona przez 2 i cyfra
znajdująca się na lewo od przecinka w iloczynie (równa 0 lub 1) wchodzi w skład
reprezentacji binarnej począwszy od najbardziej znaczącego bitu. Część
ułamkowa iloczynu jest używana jako mnożna w następnym kroku.
Na przykład: 0, 2510 = 00, 012
Obliczanie:
1
0,25 * 2 = 0,5 -> .0
2
0,5 * 2 = 1,0 -> .01
UWAGA: Proces ten nie zawsze jest dokładny; ułamek dziesiętny o skończonej liczbie
cyfr może wymagać ułamka binarnego o nieskończonej lub większej niż dopuszczalna
liczbie cyfr.
8/13
Liczby ułamkowe i rzeczywiste
Konwersja z postaci dziesiętnej na binarną stałoprzecinkową
Na przykład: 0, 25510 = 00, 010000012
Obliczanie:
1
0,255 * 2 = 0,510 -> .0
2
0,510 * 2 = 1,020 -> .01
3
0,020 * 2 = 0,040 -> .010
4
0,040 * 2 = 0,080 -> .0100
5
0,080 * 2 = 0,160 -> .01000
6
0,160 * 2 = 0,320 -> .010000
7
0,320 * 2 = 0,640 -> .0100000
8
0,640 * 2 = 1,280 -> .01000001
Jaki jest błąd reprezentacji tej liczby ?
Wartość = 1 " 2-2 + 1 " 2-8 = 0, 25 + 0, 0039 = 0, 2539
Błąd = 0,255 - 0,2539 = 0,0011 = 0,43 %
9/13
Liczby ułamkowe i rzeczywiste
Konwersja z postaci dziesiętnej na 32-bitową zmiennoprzecinkową
Na przykład: 0, 25510 = 001111111000001010001111010111002
1
Ustawić wartość wykładnika E na 0.
2
Sprowadzić metodą dzielenia lub mnożenia przez 2, liczbę do zakresu [0.5, 1.0).
Po każdej operacji dzielenia zwiększać wartość E o 1, przy każdej operacji
mnożenia zmniejszać wartość E o 1. W wyniku tego otrzymuje się wartość
mantysy, którą należy zakodować bitami 0-22, pamiętając że bit na prawo od
przecinka binarnego nie jest zapisywany.
3
Dokonać konwersji mantysy obliczonej w kroku 2 z postaci dziesiętnej do binarnej
jak dla reprezentacji stałoprzecinkowej o zerowej liczbie cyfr binarnych przed
przecinkiem binarnym i 24 bitami po przecinku.
4
W celu otrzymania wykładnika w reprezentacji przesuniętej, dodać do jego
wartości obliczonej w kroku 2 wartość 128.
5
Jeśli wartość liczby jest ujemna, ustawić bit numer 31 na 1, w przeciwnym razie
na 0.
Obliczanie:
1
E = 0
2
0, 255 " 2 = 0, 510 E = E - 1
3
S = 1000001010001111010111002
4
E = E + 128 = 12710 = 011111112
5
b31 = 0
6
Wynik: 0 01111111 000 0010 1000 1111 0101 1100
10/13
Notacja szesnastkowa
Jest ona używana w celu bardziej wygodnej reprezentacji zewnętrznej liczb binarnych,
tzn. poza systemem komputerowym (wyświetlania lub drukowania zawartości pamięci,
plików, itp).
W tej notacji, liczby binarne są grupowane czwórkami. Dla każdej możliwej kombinacji
4 bitów istnieje symbol, począwszy od 0 do 9 i od A do F. Te 16 symboli to cyfry
szesnastkowe. Stąd ciąg cyfr szesnastkowych można traktować jako wartość całkowitą
przy podstawie równej 16. Ciąg ten jest zapisywany z literą H na końcu dla
zaznaczenia podstawy stosowanego systemu liczbowego.
Na przykład:
2F16 = 216 " 161 + F16 " 160 = 210 " 161 + 1510 " 160 = 47
Notacja szesnastkowa jest używana nie tylko do wygodnego przedstawiania liczb
całkowitych, ale również innych danych binarnych (tekstowych, liczbowych, itp.).
Powody jej stosowania:
Bardziej zwarta niż binarna
Większość komputerów używa słów o długości będącej wielokrotnością 4 bitów
Aatwość konwersji między systemem binarnym i szesnastkowym.
11/13
Reprezentacja znaków
ASCII
Dotąd dyskutowane reprezentacje stosowane są do działań na liczbach wewnątrz
komputera. W celu prezentacji ich w postaci zrozumiałej dla człowieka, należy
dokonać ich przekształcenia do postaci tekstowej lub graficznej. Stosuje się w tym
celu standardy takie jak: BCD, EBCDIC, ASCII i UNICODE.
ISO opracowała 7-bitowy schemat kodowania zwany International Alphabet Number 5.
W 1967 r. wprowadzono standard pochodny, nazwany ASCII.
American Standard Code for Information Interchange
ASCII definiuje kody dla 32 znaków sterującyh, 10 liczb, 52 liter (małych i wielkich),
32 znaków specjalnych (jak np. @), i znaku odstępu.
Najstarszy (ósmy) bit był przeznaczony do kontroli parzystości. Parzystość jest
najprostszym ze sposobów detekcji błędów. Bit parzystości jest zerem lub jedynką w
zależności od tego czy wartość sumy pozostałych bitów jest parzysta/nieparzysta. Na
przykład, jeśli stosuje się even parity przesyłając znak ASCII A, najniższe 7 bitów to
100 0001. Ponieważ ich suma jest parzysta, bit parzystości będzie równy 0 i cały kod
ASCII będzie równy 0100 0001. Podobnie, przy transmisji znaku ASCII C, 100 0011,
bit parzystości będzie równy 1, stąd przesyłana wartość to 1100 0011. Parzystość
może być używana tylko do detekcji błędów pojedynczych bitów.
W miarę jak komputery stawały się bardziej stabilne, potrzeba stosowania bitu
parzystości malała. W początkach lat 1980-tych, producenci mikrokomputerów zaczęli
używać bitu parzystości do rozszerzenia zakresu reprezentowanych znaków extended
character set przez kody z zakresu 12810 do 25510. W zależności od standardu,
rozszerzone zestawy znaków mogą reprezentować symbole matematyczne, alfabety
narodowe, itp.
12/13
Reprezentacja znaków
Unicode
Unicode jest 16-bitowym alfabetem, który jest zgodny wstecznie z ASCII i Latin-1.
Jest też zgodny z definicją międzynarodowego alfabetu ISO/IEC 10646-1. Ponieważ
podstawowe kodowanie w Unicode jest 16 bitowe, ma on wystarczającą pojemność dla
zapisu większości znaków spotykanych we wszystkich językach świata. Dodatkowo,
Unicode definiuje mechanizm rozszerzania, który pozwala zakodować milion innych
znaków. jest to wystarczające do reprezentowania znaków wszystkich języków
używanych w historii cywilizacji.
Unicode jest domyślnym systemem kodowania w języku programowania Java.
Cytat ze strony internetowej Unicode Consortium:
Zasadniczo, komputery operują na liczbach. Przechowują one litery i inne znaki,
poprzez przypisaną do nich liczbę (kod znaku). Przed wprowadzeniem systemu
kodowania Unicode, istniały setki różnych systemów kodowania,
przyporządkowujących kod do znaku. Nie istniał system kodowania, wystarczająco
pojemny dla wszystkich potrzebnych znaków: na przykład, Unia Europejska potrzebuje
wielu różnych systemów kodowania do obsługi wszystkich oficjalnych języków. Nawet
dla samego języka angielskiego potrzebnych było kilku systemów kodowania dla zapisu
liter, interpunkcji i symboli technicznych będących w użyciu. Te systemy kodowania
często kolidowały ze sobą, tzn. dwa systemy używały tego samego kodu znaku dla
dwu różnych znaków, lub różnych kodów dla tego samego znaku. W tej sytuacji
komputery (w szczególności serwery) musiały obsługiwać wszystkie te systemy; a w
czasie przenoszenia danych dochodziło do ich przekłamania.
13/13
Wyszukiwarka
Podobne podstrony:
Wyklad PI 1 cz 2Wyklad PI 2 cz 2Wyklad PI 5Wyklad#$ ?le cz 1WYKŁAD 6, 7 lipidy cz 1 i 2 (SKRYPT)Wyklad PIWykład 11 cz 1Wyklad PI 9Wykład 12 cz 1Wykład Kartografia cz 1materialy wyklad pp cz 3 (2)TECHNIKI MEMBRANOWE WYKŁAD Prochaska cz 2więcej podobnych podstron