Програмирање 2/К1П 2019

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Питања

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.