Przedstawianie (lub kodowanie) liczby oznacza przedstawienie jej w formie binarnej. Przedstawianie liczb w komputerze jest niezbędne w celu przechowywania ich i operowania nimi. Jest jednak pewien problem: liczba matematyczna może być nieskończona (tak wysoka, jak sobie życzymy), ale przedstawienie liczby w komputerze musi zawierać z góry ustaloną liczbę bitów. Chodzi zatem o to, aby móc ustalić liczbę bitów i ich interpretację, aby mogły przedstawiać liczbę najlepiej, jak to możliwe. Z tego powodu niemądrym posunięciem byłoby zakodowanie znaku przy użyciu 16 bitów (65536 możliwości), gdy zwykle używa się mniej niż 256 bitów.
Przedstawienie liczby naturalnej
Liczba naturalna to liczba całkowita dodatnia lub zero. Wybór liczby bitów zależy od zakresu wykorzystywanych liczb. Aby zakodować liczby naturalne od 0 do 255 potrzebujemy tylko 8 bitów (1 bajt) jako 2 8=256. Ogólnie rzecz biorąc, kodowanie n-bitowe może być użyte do przedstawienia liczb naturalnych między 0 i 2n-1.
Aby przedstawić liczbę naturalną, po ustaleniu, ilu bitów użyjemy do jej zakodowania, należy ułożyć bity w binarną komórkę, z każdym bitem umieszczonym według wagi binarnej od prawej do lewej, a nieużywane bity “zapełnić” zerami.
Przedstawianie liczby całkowitej
Liczba całkowita to liczba bez ułamka, która może być ujemna. Liczba ta musi zatem być tak zakodowana, żeby możliwe było stwierdzenie, czy jest dodatnia, czy ujemna, a także by można było przestrzegać reguł dodawania. Sztuczka polega na metodzie kodowania zwanej kodem uzupełnień do dwóch.
- Dodatnia liczba całkowita lub zero będzie przedstawiona binarnie (baza 2) jako liczba naturalna, z tym że najstarszy bit (najbardziej z lewej) oznacza plus lub minus. Zatem dla dodatniej liczby całkowitej lub zera bit ten musi być ustawiony na 0 (co odpowiada plusowi; 1 oznacza minus). W ten sposób, jeśli liczba naturalna zostanie zakodowana przy użyciu 4 bitów, najwyższą możliwą liczbą będzie 0111 (lub 7 w stopniach dziesiętnych).
Z reguły najwyższą dodatnią liczbą całkowitą przy liczbie bitówn będzie 2n-1-1.
- Ujemna liczba całkowita jest kodowana przy użyciu kodu uzupełnień do dwóch.
Zasada kodu uzupełnień do dwóch:
- Wybierz liczbę ujemną.
- Weź jej wartość absolutną (jej równoważną wartość dodatnią).
- Jest przedstawiona w bazie 2 przy użyciu n bitów-1.
- Każdy bit zostaje zamieniony ze swoim uzupełnieniem (tzn. zera zastępowane jedynkami i na odwrót).
- Dodaj 1: zwróć uwagę, że poprzez dodanie liczby i jej uzupełnienia do dwóch uzyskujemy wynik 0. Zobaczmy to na przykładzie:
Chcemy zakodować wartość -5 przy użyciu 8 bitów. Aby to zrobić:
- zapisz 5 binarnie: 00000101.
- zamień to na uzupełnienie: 11111010.
- dodaj 1: 11111011.
- 8-bitowa binarna prezentacja -5 to 11111011.
Komentarze:
Najstarszy bit to 1, więc jest to na pewno liczba ujemną.
Jeśli dodasz 5 i -5 (00000101 i 11111011) suma wynosi 0 (z resztą 1).
Przedstawianie liczby rzeczywistej
Celem jest przedstawienie binarne liczby z cyframi po przecinku (np. 101.01, której nie czyta się sto jeden przecinek zero jeden ponieważ tak naprawdę to liczba binarna, tj. 5.25 w stopniu dziesiętnym) przy użyciu formy 1.XXXXX... * 2n (w naszym przykładzie 1.0101*22). Norma IEEE 754 określa, jak zakodować liczbę rzeczywistą.
Norma ta pozwala zakodować liczbę przy użyciu 32 bitów i określa 3 komponenty:
- znak plus/minus jest reprezentowany przez 1 bit – najstarszy (najbardziej z lewej).
- wykładnik jest zakodowany przy użyciu 8 bitów zaraz po znaku.
- mantysa (bity po przecinku) z pozostałymi 23 bitami. W ten sposób kodowanie przyjmuje formę:
seeeeeeeemmmmmmmmmmmmmmmmmmmmmmm
- s oznacza bit znaku.
- każde e oznacza bit wykładnika.
- każde m oznacza bit mantysy.
Istnieją jednak pewne ograniczenia co do wykładnika:
- zabroniony jest wykładnik 00000000.
- zabroniony jest wykładnik 11111111. Są one jednak wykorzystywane do raportów o błędach. Ta konfiguracja numeryczna jest nazywana NaN, tzn. Not a number – nie jest liczbą.
- 127 (01111111) musi zostać dodane do wykładnika, aby przekształcić liczbę dziesiętną w rzeczywistą binarną. Wykładniki mogą zatem zawierać się w przedziale -254-255.
Zatem formuła wyrażania liczb rzeczywistych to:
(-1)^S * 2^( E - 127 ) * ( 1 + F )
gdzie:
- S to bit znaku, a 0 jest uznawane za znak dodatni (-1^0=1).
- E to wykładnik, do którego należy dodać 127, aby otrzymać zakodowaną równowartość.
- F to część ułamkowa, jedyna, która jest wyrażana, i którą dodaje się do 1 w celu wykonania obliczenia.
Oto przykład:
Mamy zakodować wartość 525,5.
- 525,5 jest dodatnie, więc pierwszy bit to 0.
- Jego prezentacja w bazie 2 to: 1000001101.1.
- Normalizując ją otrzymujemy: 1.0000011011*2^9.
- Dodajemy 127 do wykładnika, który wynosi 9, daje nam 136, a w bazie 2: 10001000.
- Mantysa składa się z części dziesiętnej 525.5 w znormalizowanej bazie 2, która wynosi 0000011011.
- Jako że mantysa zajmuje 23 bity, należy dodać zera, aby ją uzupełnić:
00000110110000000000000.
- Binarna prezentacja 525.5 wg normy IEEE 754 to wobec tego:
0 1000 1000 00000110110000000000000
0100 0100 0000 0011 0110 0000 0000 0000 (4403600 w postaci szesnastkowej).
Oto kolejny przykład, tym razem zawiera ujemną liczbę rzeczywistą:
Mamy zakodować wartość -0.625.
- Bit s to 1, gdyż 0.625 jest ujemne.
- 0.625 zapisuje się w bazie 2 następująco: 0.101.
- Chcemy to zapisać w formie 1.01 x 2-1.
- Zatem wykładnik wynosi 1111110, jako że 127 - 1 = 126 (lub 1111110 w wersji binarnej).
- Mantysa wynosi 01000000000000000000000 (przedstawiane są tylko cyfry po przecinku, jako że liczba całkowita zawsze jest równa 1).
- Binarna prezentacja liczby 0.625 wg normy IEEE 754 to:
1 1111 1110 01000000000000000000000
1111 1111 0010 0000 0000 0000 0000 0000 (FF 20 00 00 w postaci szesnastkowej).
Zdjęcie: © Signs and Symbols - Shutterstock.com