Програмирање 2/К1П 2019
Питања
1. питање
На неком рачунару, реални бројеви се представљају на ширини од 10 бита у формату сееееммммм, где је с предзнак броја, ееее су битови експонента у коду са вишком 7 и ммммм су бити нормализоване мантисе са скривеним битом (1≤М<2). Цели бројеви се представљају на ширини од 8 бита у комплементу двојке. Нека се у целобројној локацији А налази број чија је представа 8216, док се у реалној локацији Б налази број чија је вредност 13.2510. Како на датом рачунару изгледа представа броја који је резултат операције А + Б? Сва заокруживања се обављају према правилима АНСИ/ИЕЕЕ стандарда за реалне бројеве.
Поставка
Треба сабрати два реална броја. За почетак претворимо оно што нам је дато у реалне бројеве по формату.
- Број бити експонента је к = 4
- Вишак (ИЕЕЕ) је в = 24-1-1 = 7
- Број бити мантисе је п = 5
- Мантиса је ИЕЕЕ формата 1.xxxxx
Број А
8 бита, комплемент 2, дакле последњи бит одређује знак. А = 8216 = 1000 0010. Број је очигледно негативан. Комплементирамо да извучемо вредност. А = - 111 1110 = -126.
Треба нормализовати овај број да би стао у формат мантисе. 111 1110 => 1.11 1110. Померањем улево за 6 места добијамо број Аф = - 1.111110 * 26. Експонент Е = 6. Подвлачимо мантису: MА = 11111. Овде није било заокруживања (правило 1). Тако да је број у запису -1.11111 * 26.
Број Б
Б = 13.25. Претварамо одвојено цели и децимални део. 1310 = 11012 0.2510 = 0.012 Спојимо и добијемо 1101.01. Нормализујемо тако да стане у формат мантисе померањем зареза улево. 1.10101 * 23. Експонент је Е = 3. Број Бф = 1.10101 * 23.
Сабирање
Број Б се доводи на већи експонент, при томе се заокружује мантиса (правило 2). Бф = 1.10101 * 23 = 0.00110101 * 26 = 0.00111 * 26.
Очекујемо негативан број јер је |А|>|Б|. Одузимамо реалне бинарне бројеве: Аф + Бф = 0.00111 * 2 6 - 1.11111 * 26 = -(1.11111 * 26 - 0.00111 * 2 6) = - 1.11000 * 26.
Репрезентација
Наш број је - 1.11000 * 26. Конвертујемо га у представу формата:
с ееее ммммм
Знак је - па је бит с 1.
1 ееее ммммм
Експоненту додајемо померај (вишак). е = Е + в = 6 + 7 = 13 = 11012.
1 1101 ммммм
Мантису препишемо
1 1101 11000
Претворимо у хеx број:
0011 1011 1000 = 3Б8.
4. питање
Ова питалица се реши на поглед. Једино треба проверити да ли је (Б) или ниједан од понуђених одговора. Функција принтф никад неће вратити стринг ако јој је дат форматски спецификатор %д. Називи енумова постоје само у коду и губе се током компилације, тако да је једино смислено решење (Б) 3 91.