Programiranje 2/K1P 2019
Pitanja
1. pitanje
Na nekom računaru, realni brojevi se predstavljaju na širini od 10 bita u formatu seeeemmmmm, gde je s predznak broja, eeee su bitovi eksponenta u kodu sa viškom 7 i mmmmm su biti normalizovane mantise sa skrivenim bitom (1≤M<2). Celi brojevi se predstavljaju na širini od 8 bita u komplementu dvojke. Neka se u celobrojnoj lokaciji A nalazi broj čija je predstava 8216, dok se u realnoj lokaciji B nalazi broj čija je vrednost 13.2510. Kako na datom računaru izgleda predstava broja koji je rezultat operacije A + B? Sva zaokruživanja se obavljaju prema pravilima ANSI/IEEE standarda za realne brojeve.
Postavka
Treba sabrati dva realna broja. Za početak pretvorimo ono što nam je dato u realne brojeve po formatu.
- Broj biti eksponenta je k = 4
- Višak (IEEE) je v = 24-1-1 = 7
- Broj biti mantise je p = 5
- Mantisa je IEEE formata 1.xxxxx
Broj A
8 bita, komplement 2, dakle poslednji bit određuje znak. A = 8216 = 1000 0010. Broj je očigledno negativan. Komplementiramo da izvučemo vrednost. A = - 111 1110 = -126.
Treba normalizovati ovaj broj da bi stao u format mantise. 111 1110 => 1.11 1110. Pomeranjem ulevo za 6 mesta dobijamo broj Af = - 1.111110 * 26. Eksponent E = 6. Podvlačimo mantisu: MA = 11111. Ovde nije bilo zaokruživanja (pravilo 1). Tako da je broj u zapisu -1.11111 * 26.
Broj B
B = 13.25. Pretvaramo odvojeno celi i decimalni deo. 1310 = 11012 0.2510 = 0.012 Spojimo i dobijemo 1101.01. Normalizujemo tako da stane u format mantise pomeranjem zareza ulevo. 1.10101 * 23. Eksponent je E = 3. Broj Bf = 1.10101 * 23.
Sabiranje
Broj B se dovodi na veći eksponent, pri tome se zaokružuje mantisa (pravilo 2). Bf = 1.10101 * 23 = 0.00110101 * 26 = 0.00111 * 26.
Očekujemo negativan broj jer je |A|>|B|. Oduzimamo realne binarne brojeve: Af + Bf = 0.00111 * 2 6 - 1.11111 * 26 = -(1.11111 * 26 - 0.00111 * 2 6) = - 1.11000 * 26.
Reprezentacija
Naš broj je - 1.11000 * 26. Konvertujemo ga u predstavu formata:
s eeee mmmmm
Znak je - pa je bit s 1.
1 eeee mmmmm
Eksponentu dodajemo pomeraj (višak). e = E + v = 6 + 7 = 13 = 11012.
1 1101 mmmmm
Mantisu prepišemo
1 1101 11000
Pretvorimo u hex broj:
0011 1011 1000 = 3B8.
4. pitanje
Ova pitalica se reši na pogled. Jedino treba proveriti da li je (B) ili nijedan od ponuđenih odgovora. Funkcija printf nikad neće vratiti string ako joj je dat formatski specifikator %d. Nazivi enumova postoje samo u kodu i gube se tokom kompilacije, tako da je jedino smisleno rešenje (B) 3 91.