Przykład konwersji liczby dziesiętnej do postaci binarnej 32-
bitowej (short real), zgodnej z normą IEEE754:
1. Liczba L = 30.55
2. Konwersja 10
→2 części całkowitej: 30
10
= 11110
2
.
30 : 2 =
15 reszty 0
15 : 2 =
7
reszty 1
7 : 2 =
3
reszty 1
3 : 2 =
1
reszty 1
1 : 2 =
0
reszty 1
3. Konwersja 10
→2 części ułamkowej: 0.55
10
= 0.100011001100110011
2
Uwaga: na potrzeby zadania zakładam zachowanie dokładności do 0.001
10
czyli co
najmniej dziesięć cyfr dwójkowych. Naprawdę na mantysę w formacie 32-bitowym
ZMP przeznaczamy 23 bity, ale być może uzyskamy jeszcze kilka bitów mantysy na
etapie normalizacji z przekształcania części całkowitej.
0.55 * 2 = 1.10
0.10 * 2 = 0.20
0.20 * 2 = 0.40
0.40 * 2 = 0.80
0.80 * 2 = 1.60
0.60 * 2 = 1.20
0.20 * 2 = 0.40
0.40 * 2 = 0.80
0.80 * 2 = 1.60
0.60 * 2 = 1.20
0.20
*
2
=
0.40
4. Podsumowując rezultaty z punktów 2 i 3, otrzymujemy
30.55
10
= 11110.1000(1100)
2
Znak (1b)
31
Wykładnik (8b)
30 ... 23
Mantysa (23b)
22 ... 0
Należy teraz wytworzyć wartości poszczególnych pól formatu:
Znak = 0 bo liczba L jest dodatnia
Wykładnik i mantysa zostaną obliczone po normalizacji.
5. Normalizacja ( 1
≤ L
n
< 2 )
11110.10001100(1100)
2
* 2
0
= 1.1110 1000 1100 1100 ...
2
* 2
4
Wykładnik rzeczywisty liczby exp = 4.
Wykładnik spolaryzowany exp
spol
= 4 + 127 = 131.
Kod dwójkowy wykładnika spolaryzowanego to 10000011
2
(128+2+1).
6. Mantysaznormalizowana m
n
to
m
n
= 1.1110 1000 1100 1100 ...
Usuwamy domyślną jedynkę ( 1.xxx ), tworząc mantysę maszynową m
m = 1110 1000 1100 1100 1100 110
7. Rezultat konwersji:
L = 30.55
10
=
Czyli korzystając z zapisu szesnastkowego:
L = 30.55
10
= 0100 0001 1111 0100 0110 0110 0110 0110
2 ZMP
=
= 41F4 5555
H ZMP
0 10000011 1110 1000 1100 1100 1100 110
8. Po konwersji 2
→10 otrzymujemy
P = 01000001111101000110011001100110
2
=
3.05499992370605E+0001 = 30.5499992370605
≠ 30.55
2
Przykład konwersji liczby binarnej 32-bitowej (short real),
zgodnej z normą IEEE754 do postaci dziesiętnej:
1. R = 00111111101000000000000000000000
2
2. Rozbicie liczby R na poszczególne pola
0 01111111 01000000000000000000000
Znak = 0
Wykładnik spolaryzowany exp
spol
= 01111111
2
=
64+32+16+8+4+2+1=127.
A wobec tego wykładnik rzeczywisty liczby exp = exp
spol
– 127 =
127 – 127 = 0.
Mantysa maszynowa ( bez ukrytej jedynki)
m = 01000000000000000000000
2
Po odtworzeniu ukrytej jedynki otrzymujemy mantysę
znormalizowaną:
m
n
= 101000000000000000000000
2
3. Co pozwala na odtworzenie wartości liczby po konwersji dwójkowo-
dziesiętnej:
L = (-1)
Znak
* m * 2
exp
= 1 * 1.010 * 2
0
= 1.010
2
= 1.25
10
3