Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Перевірка за допомогою демонстраційної програми правильності результатів, отриманих під час виконання індивідуального завдання у відповідності з п.4




Лабораторна робота № 4

МАШИННІ КОДИ. ДОДАВАННЯ ТА ВІДНІМАННЯ ДРОБОВИХ ДВІЙКОВИХ ЧИСЕЛ В ФОРМАТІ З ПЛАВАЮЧОЮ КОМОЮ

 

Мета роботи

В результаті виконання лабораторної роботи:

· вміти використовувати зображення двійкових чисел в форматі з плаваючою комою;

·    придбати практичні навички під час виконання операцій додавання та віднімання

двійкових чисел у форматі з плаваючою комою.

 

 

Теми для попереднього пророблення

2.1. Правила додавання двійкових цифр в i-му розряді двійкового числа з урахуванням можливого переносу із попереднього молодшого розряду.

2.2. Переведення дробових чисел із десяткової системи числення в двійкову і навпаки.

2.3. Використання поля довжиною 1 байт для зображення цілих двійкових чисел.

2.4. Зображення цілих двійкових чисел в зворотному та додатковому коді.

2.5. Особливості виконання операції додавання мантис в зворотному або додатковому модифікованому коді.

Завдання до лабораторної роботи

 

3.1. Вибрати завдання із таблиці 1 у відповідності з порядковим номером в журналі групи. Виконати вручну переведення вихідних чисел A10 і B10 (див. табл. 1), зображених в десятковій системі числення, в двійкову систему числення, в прямому коді. Точність двійкового  зображення чисел A2 і B2 – дев’ять двійкових цифр після коми.

 

Таблиця1 – Вихідні дані для виконання лабораторної роботи

Варіант A10 B10 Варіант A10 B10
1 16.53 –36.29 16 36.63 –57.75
2 23.47 53.67 17 –59.97 37.73
3 –65.38 15.74 18 38.12 68.59
4 42.89 33.52 19 –71.17 39.93
5 –76.74 17.44 20 40.14 –56.65
6 –32.19 –80.88 21 –72.27 43.36
7 99.57 –15.97 22 44.51 –69.96
8 51.68 28.79 23 63.85 46.64
9 –35.49 77.39 24 –48.84 –18.81
10 64.25 –19.43 25 61.16 50.15
11 –47.31 29.34 26 –52.29 28.82
12 20.52 45.78 27 26.63 54.47
13 30.32 –55.56 28 58.85 –24.42
14 67.76 31.41 29 22.72 60.76
15 34.54 –87.77 30 –70.73 21.12

3.2.Отримані двійкові числа A2 і B2 представити в форматі з плаваючою комою в прямому (ПК) коді – будемо мати A[пк] і B[пк]. Вирівняти порядки і отримати зворотний (ЗК) і додатковий (ДК) коди – будемо мати відповідно A[зк], B[зк], A[дк] і B[дк]. Прямий, зворотний і додатковий коди отримати для +A10 і –A10, а також для +B10 і –B10.

3.3. Виконати вручну додавання (віднімання) мантис двійкових чисел A[дк] і B[дк] в додатковому модифікованому коді. Додавання виконати для різних комбінацій знаків чисел A[дк] і B[дк], а саме для (+,+), (+,–), (–,–) і (–,+).

3.4.Виконавши нормалізацію мантиси результату додавання, коли в цьому є необхідність, відтворити результат додавання в ДК, ЗК і ПК, а також в двійковому з фіксованою комою і десятковому коді.

3.5. Для всіх комбінацій значень знаків у A10 і B10 отримати результати додавання (віднімання) цих чисел шляхом запускання демонстраційної програми. Співставити результати роботи демонстраційної програми з результатами, отриманими вручну.

3.6. При незбігу результатів, отриманих в пп.3.3 і 3.4, з результатами, отриманими в п.3.5, знайти і усунути помилки у власних розрахунках.

 

Хід отримання результатів

 

4.1. Зображення чисел у форматі з плаваючою комою

У чисел з плаваючою комою кома (точка) відділяє цілу частину числа від його дробової частини. Числа в форматі з плаваючою комою в оперативній пам’яті у полі заданої довжини часто містять знак порядка, порядок, знак мантиси і мантису (див. рис. 1).

 

 


Рис. 1 – Один із форматів зображення чисел з плаваючою комою

 

Для зображення знаків порядка і мантиси резервують по одному біту: 0 – ознака додатного значення; 1 – ознака від’ємного значення. Знак числа співпадає зі знаком мантиси.

  Порядок – це число, що відтворює степінь, в яку треба піднести число 2. На число “2 в степіні “порядок” треба помножити мантису щоб отримати значення двійкового числа з плаваючою комою. Таким чином, порядок визначає місцезнаходження точки в двійковому числі в форматі з фіксованою комою.

Мантиса містить як цілу, так і дробову частини числа, що було зображене в форматі з фіксованою комою, але при умові, що двійкова кома перенесена з метою отримання нормалізованого значення мантиси. В мантисі кількість двійкових розрядів, які займає ціла частина числа з фіксованою комою, визначається значенням порядка, а решта розрядів містять дробову частину числа з фіксованою комою.

Для отримання нормалізованого числа з плаваючою комою порядок необхідно змінити таким чином, щоб лівий (старший) біт мантиси був не 0. Наприклад, замість мантиси 00001011 ... 11 треба використати мантису 1011 ... 110000, але при цьому порядок треба зменшити на чотири.

Наприклад:

A10 =  – 20.125

A2 =  –10100.0001 =  – 0.101000001*2+5

В форматі з плаваючою комою: мантисса М2 = 1010000012; порядок Р10 = 510 , Р2 = 1012.

Таким чином, для одного із варіантів зображення двійкового числа в форматі з плаваючою комою (наприклад, в 4‑байтовому полі) будемо мати наступне:

 

0 0000101 1 1010000 01000000 00000000

 

        знак порядок знак                                   мантиса

 порядка             мантиси

 

4.2. Правила додавання (віднімання) чисел у форматі з плаваючою комою

Основні правила додавання (віднімання) чисел у форматі з плаваючою комою можна сформулювати наступним чином:

1) Треба виконати операцію віднімання над значеннями порядків вихідних чисел A[пк] і B[пк]. Якщо різниця порядків не дорівнює нулю, мають бути виконані вирівнювання порядків і корекція відповідної мантиси.

3) При вирівнюванні порядків вміст розрядів мантиси числа з меншим порядком треба зрушити вправо на різницю порядків. При цьому виштовхувані молодші розряди мантиси числа з меншим порядком зникають, в її старші розряди вписуються нулі, а порядок даного числа збільшується на отриману різницю порядків.

4) Треба вирівняти розрядну сітку мантиси того числа, у якого менша кількість розрядів в мантисі – в мантису цього числа мають бути дописані нулі справа.

5) Виконати операцію додавання мантис (операція віднімання замінюється операцією додавання з від’ємним числом). Дії над доданками (мантисами) виконуються в зворотному (ЗК) або додатковому (ДК) модифіцированому коді.

6) Порядок результата береться рівним більшому порядку.

7) Якщо мантиса результата не нормалізована, то виконуються нормалізація мантиси і корекція значення порядка.

Нормалізація мантиси результата виконується в двох випадках:

а) цифри в знакових розрядах мантиси не співпадають;

б) цифри в знакових розрядах однакові і співпадають з цифрою старшого розряду мантиси.

Якщо цифри в знакових розрядах мантиси не співпадають, то мантиса зрушується на один розряд вправо,  а порядок збільшується на одиницю.

Якщо цифри знакових розрядів мантиси однакові і співпадають з цифрою старшого розряду мантиси, то мантиса зрушується на один розряд вліво, а порядок зменшується  на одиницу.

8). Врешті решт результат, отриманий при виконанні операції додавання, треба відобразити в прямому коді, виконавши округлення мантиси результату, а потім – в десятковому коді.

 

Приклад:

 

А10 = 6,25,  В10 = 20,5

 

1. Записуємо числа в двійковому коді:

А2 = 110,01 = 0.11001*2+3

В2 = 10100,1 = 0.101001*2+5

2. Записуємо числа в форматі з плаваючою комою (див. п.4.1):

 [А]пк = 0  011  0  11001

 [В]пк= 0  101  0  101001

3. Порівнюємо порядки: РВРА = 5 – 3 = 2.

 

    4. Різниця порядків не дорівнює нулю, тому виконуємо вирівнювання порядку числа A і відповідну корекцію мантиси числа A (порядок числа А менше порядка числа В на 2, тому робимо зрушення мантиси числа А на два розряди вправо і збільшуємо порядок числа А на два):

[А]пк = 0  101  0  0011001

[В]пк= 0  101  0  101001

 

5. Вирівнюємо кількість двійкових розрядів в мантисах чисел А і В (розрядна сітка мантиси числа В на одиницю меньша, тому в мантису числа Bдописуємо один нуль справа):

[А]пк = 0  101  0  0011001

[В]пк= 0  101  0  1010010

6. Виконуємо операцію додавання мантис в додатковому модифікованому коді (знаки мантис відображаємо двома двійковими розрядами):

[МА]дк  = 00   0011001

       +[МВ]дк = 00  1010010

[МС]дк = 00  1101011

     Мантиса результату додавання не потребує нормалізації, тому що розряди знака мають однакові значення і значення старшого розряду мантиси не дорівнює значенню молодшого разряду знака.

7. Записуємо результат у форматі з плаваючою комою: 0  101  0  1101011

8. Переводимо результат в двійковий і десятковий коди

 

 

С2 = 11010,11 С10 = 16+8+2+0,5+0,25 = 26,75

 

Слід мати на увазі, що часто через невелику кількість двійкових розрядів, виділених для зберігання мантиси, виникає похибка відтворення дробової частини вихідного числа в двійковій системі числення. Значення абсолютної похибки D відтворення числа X обчислюється по формулі:

 

                                                       D  = Xвихідне  – Xотримане ,

де Xвихідне – вихідне число, Xотримане – отримане число.

Значення відносної похибки d відтворення числа X обчислюється по формулі:

 

                                                       d = (D / Xвихідне)*100% .

 

 


Перевірка за допомогою демонстраційної програми правильності результатів, отриманих під час виконання індивідуального завдання у відповідності з п.4

5.1. Спочатку треба вручну отримати результати для свого індивідуального завдання, як зроблено в прикладі із п.4.2.

Але в демонстраційній програмі реалізоване дещо інше зображення двійкових чисел в форматі з плаваючою комою, а саме в 3‑байтовому полі (зліва направо):

– в старшому біті знак мантиси, тобто числа;

– в 7-ми наступних бітах – порядок (без знака);

– після крапки, яка відділяє на екрані порядок від мантиси, нормалізоване зображення мантиси (в двох байтах).

Тому виконання індивідуального завдання у відповідності з п.4.2 має бути орієнтоване на подальше використання демонстраційної програми.

5.2. Перевірити правильність отриманих в п.5.1 результатів за допомогою демонстраційної програми, текст якої розміщений нижче.

5.3. Демонстраційну програму треба запустити на виконання в одному з середовищ, яке підтримує програмування на мові Pascal.

5.4. Текст демонстраційної програми.

 

{сложение чисел в формате с плавающей точкой}

program plavaush;

uses crt;

var r:real;                                        {результат сложения}

i,a_h,b_h,c_h:shortint;    {-128..+127}{а_h,b_h,c_h порядок}

                           {двоичной записи чисел a, b, c}

a_l,b_l,c_l:word;            {a_l,b_l,c_l мантисса двоичной записи}

p_b,p_a,t:byte;               {p_b,p_a порядок чисел b и a}

f:boolean;

d:char;

 

Procedure shr_ab(var a:shortint;var b:word);

{линейный сдвиг вправо двоичной записи}

begin

for i:=1 to 15 do {shr b}

if (((1 shl i) and b)<>0) and (((1 shl (i-1)) and b)=0)

then b:=b+(1 shl (i-1)) else

      if (((1 shl i) and b)=0) and (((1 shl (i-1)) and b)<>0)

         then b:=b-(1 shl (i-1));

if ((1 shl 15) and b)<>0 then b:=b-(1 shl 15);

if odd(a) then b:=b+trunc(exp(15*ln(2)));

for i:=1 to 6 do {sar a}

if (((1 shl i) and a)<>0) and (((1 shl (i-1)) and a)=0)

then a:=a+(1 shl (i-1)) else

      if (((1 shl i) and a)=0) and (((1 shl (i-1)) and a)<>0)

         then a:=a-(1 shl (i-1));

if ((1 shl 6) and a)<>0 then a:=a-(1 shl 6);

end;

Procedure Write_ab(a:shortint;b:word);

{вывод на экран двоичной записи}

begin

for i:=7 downto 0 do

    write(ord(((1 shl i) and a)<>0):2);

write('.');

for i:=15 downto 0 do

   write(ord(((1 shl i) and b)<>0):2);

Writeln(' ');

end;

 

BEGIN

 while true do

 begin

clrscr;

textcolor(13);

writeln('Замечания:');

writeln('# Оба исходных числа вводите в формате: цц.цц / +цц.цц / -цц.цц');

writeln('# После ввода каждого исходного числа нажимайте Enter');

writeln('# На экране - слева направо:');

writeln(' - в старшем бите знак мантиссы, т.е. числа');

writeln(' - в 7-ми следующих битах - порядок без знака');

writeln(' - в двух байтах, после разделяющей точки - ');

writeln('   нормализованное представление мантиссы');

writeln;

textcolor(15);

 

{Ввод числа А}

Write('Введите число A = ');

Read(r);

 

{Перевод в форму с фиксированной точкой}

a_h:=abs(trunc(r));

if r<0 then a_h:=a_h + trunc(exp(7*ln(2)));

r:=frac(r);

i:=15;

while (r<>0) and (i<>0) do

begin

r:=r*2;

if trunc(r) <>0 then a_l:=a_l + trunc(exp(i*ln(2)));

dec(i);

r:=frac(r);

end;

 

{Ввод числа B}

Write('Введите число B = ');

Read(r);

{Перевод в форму с фиксированной точкой}

b_h:=abs(trunc(r));

if r<0 then b_h:=b_h+trunc(exp(7*ln(2)));

r:=frac(r);

i:=15;

while (r<>0) and (i<>0) do

begin

r:=r*2;

if trunc(r) <>0 then b_l:=b_l+trunc(exp(i*ln(2)));

dec(i);

r:=frac(r);

end;

for i:=6 downto 0 do {нахождение порядка числа А}

if ord((1 shl i) and a_h)<>0 then begin p_a:=i+1; break; end;

 

{Перевод в формат с плавающей точкой}

t:=p_a;

while t<>0 do begin shr_ab(a_h,a_l); dec(t); end;

for i:=6 downto 0 do {нахождение порядка числа В}

if ord((1 shl i) and b_h)<>0 then begin p_b:=i+1; break; end;

 

{Перевод в формат с плавающей точкой}

t:=p_b;

while t<>0 do begin shr_ab(b_h,b_l); dec(t); end;

 

{указать порядок числа}

a_h:=a_h+p_a;

b_h:=b_h+p_b;

 

Write(#10#13,'A[пк]=');

Write_ab(a_h,a_l);

Write('B[пк]=');

Write_ab(b_h,b_l);

 

{Выравнивание порядков чисел}

if p_a>p_b then begin

t:=p_a-p_b;

while t<>0 do

begin

   for i:=1 to 15 do {shr b_l}

if (((1 shl i) and b_l)<>0) and (((1 shl (i-1)) and b_l)=0)

then b_l:=b_l+(1 shl (i-1)) else

      if (((1 shl i) and b_l)=0) and (((1 shl (i-1)) and b_l)<>0)

         then b_l:=b_l-(1 shl (i-1));

if ((1 shl 15) and b_l)<>0 then b_l:=b_l-(1 shl 15);

inc(b_h);dec(t);

end;

Write(' Выравнивание порядков.');

end

else if p_a<p_b then begin

t:=p_b-p_a;

while t<>0 do

begin

   for i:=1 to 15 do {shr a_l}

if (((1 shl i) and a_l)<>0) and (((1 shl (i-1)) and a_l)=0)

then a_l:=a_l+(1 shl (i-1)) else

      if (((1 shl i) and a_l)=0) and (((1 shl (i-1)) and a_l)<>0)

         then a_l:=a_l-(1 shl (i-1));

if ((1 shl 15) and a_l)<>0 then a_l:=a_l-(1 shl 15);

inc(a_h);dec(t);

end;

Write(' Выравнивание порядков.');

end;

 

{Перевод чисел в обратный код}

if a_h<0 then

for i:=15 downto 0 do

begin {invert a_l}

if ((1 shl i)and a_l)=0 then

   a_l:=a_l+(1 shl i) else a_l:=a_l-(1 shl i) ;

end;

if b_h<0 then

for i:=15 downto 0 do

begin {invert b_l}

if ((1 shl i)and b_l)=0 then

   b_l:=b_l+(1 shl i) else b_l:=b_l-(1 shl i);

end;

 

Write(#10#13,'A[ок]=');

Write_ab(a_h,a_l);

Write('B[ок]=');

Write_ab(b_h,b_l);

 

{Перевод в дополнительный код}

if a_h<0 then inc(a_l);

if b_h<0 then inc(b_l);

 

Write(#10#13,'A[дк]=');

Write_ab(a_h,a_l);

Write('B[дк]=');

Write_ab(b_h,b_l);

{сдвиг мантиссы на два разряда для работы с модифицированным кодом}

t:=2;

 

While t<>0 do begin

for i:=1 to 15 do {shr b_l}

if (((1 shl i) and b_l)<>0) and (((1 shl (i-1)) and b_l)=0)

then b_l:=b_l+(1 shl (i-1)) else

      if (((1 shl i) and b_l)=0) and (((1 shl (i-1)) and b_l)<>0)

         then b_l:=b_l-(1 shl (i-1));

if ((1 shl 15) and b_l)<>0 then b_l:=b_l-(1 shl 15);

 

for i:=1 to 15 do {shr a_l}

if (((1 shl i) and a_l)<>0) and (((1 shl (i-1)) and a_l)=0)

then a_l:=a_l+(1 shl (i-1)) else

      if (((1 shl i) and a_l)=0) and (((1 shl (i-1)) and a_l)<>0)

         then a_l:=a_l-(1 shl (i-1));

if ((1 shl 15) and a_l)<>0 then a_l:=a_l-(1 shl 15);

dec(t);

end;

 

{установить в знаковых разрядах 11, если число отрицательное}

if a_h<0 then a_l:=a_l or (1 shl 15) or (1 shl 14) ;

if b_h<0 then b_l:=b_l or (1 shl 15) or (1 shl 14) ;

 

{вывод на экран слагаемых}

Write(#10#13,'Aм = ');

for i:=15 downto 0 do begin

    if i=13 then Write(' ':2);

    write(ord(((1 shl i) and a_l)<>0):2); end;

Write(#10#13,'+':6,#10#13,'Bм = ');

for i:=15 downto 0 do begin

    if i=13 then Write(' ':2);

    write(ord(((1 shl i) and b_l)<>0):2); end;

 

for i:= 0 to 15 do {Сложение. f содержит бит переноса}

case ord(((1 shl i) and a_l)<>0)+ord(((1 shl i) and b_l)<>0)+ord(f) of

1:begin

c_l:=c_l or trunc(exp(i*ln(2)));

f:=false;

end;

2:f:=true;

3:begin

c_l:=c_l or trunc(exp(i*ln(2)));

f:=true;

end;

else

   f:=false;

end;

c_h:=b_h;

 

{вывод результата сложения на экран}

if c_h<0 then c_h:=c_h-trunc(exp(7*ln(2)));

Write(#10#13,'Cм = ');

for i:=15 downto 0 do begin

    if i=13 then Write(' ':2);

    write(ord(((1 shl i) and c_l)<>0):2); end;

 

{если значения знаковых битов мантиссы не совпадают,

выполняется нормализация мантиссы}

if ord(((1 shl 15) and c_l)<>0) <> ord(((1 shl 14) and c_l)<>0) then begin

for i:=1 to 15 do {sar c_l}

if (((1 shl i) and c_l)<>0) and (((1 shl (i-1)) and c_l)=0)

then c_l:=c_l+(1 shl (i-1)) else

      if (((1 shl i) and c_l)=0) and (((1 shl (i-1)) and c_l)<>0)

         then c_l:=c_l-(1 shl (i-1));

{if ((1 shl 15) and c_l)<>0 then c_l:=c_l-(1 shl 15);}{????}

inc(c_h);

Write(#10#13' Нормализация мантиссы.');

end;

 

{если знаковые биты совпадают со старшим битом мантиссы, выполняется

нормализация мантиссы}

if (ord(((1 shl 15) and c_l)<>0)=ord(((1 shl 14) and c_l)<>0)) and

(ord(((1 shl 15) and c_l)<>0)=ord(((1 shl 13) and c_l)<>0)) then

 

begin

while (ord(((1 shl 15) and c_l)<>0)=ord(((1 shl 14) and c_l)<>0)) and

(ord(((1 shl 15) and c_l)<>0)=ord(((1 shl 13) and c_l)<>0)) do begin

      for i:=14 downto 0 do

        if (((1 shl i) and c_l)<>0) and (((1 shl (i+1)) and c_l)=0)

        then c_l:=c_l+(1 shl (i+1)) else

             if (((1 shl i) and c_l)=0) and (((1 shl (i+1)) and c_l)<>0)

             then c_l:=c_l-(1 shl (i+1));

        if odd(c_l) then dec(c_l);

        dec(c_h);

end;

Write(#10#13' Нормализация мантиссы.');

end;

 

{перенос знака результата сложения в знаковый разряд числа}

if ((1 shl 15) and c_l)<>0 then c_h:=c_h+trunc(exp(7*ln(2)));

t:=2;

While t<>0 do begin

{удаление знаковых разрядов мантиссы}

for i:=14 downto 0 do

if (((1 shl i) and c_l)<>0) and (((1 shl (i+1)) and c_l)=0)

then c_l:=c_l+(1 shl (i+1)) else

      if (((1 shl i) and c_l)=0) and (((1 shl (i+1)) and c_l)<>0)

         then c_l:=c_l-(1 shl (i+1));

if odd(c_l) then dec(c_l);

dec(t);

end;

 

Write(#10#13,'C[дк]=');

Write_ab(c_h,c_l);

 

{Переход к обратному коду}

if c_h<0 then

for i:=15 downto 0 do

begin {invert c_l}

if ((1 shl i)and c_l)=0 then

   c_l:=c_l+(1 shl i) else c_l:=c_l-(1 shl i) ;

end;

Write(#10#13,'C[ок]=');

Write_ab(c_h,c_l);

 

{Переход к прямому коду}

if c_h<0 then begin

f:=false;

b_l:=0;

for i:= 0 to 15 do {Сложение c_l+1. f содержит биты переносов}

 case ord(((1 shl i) and c_l)<>0)+ord(((1 shl i) and 1)<>0)+ord(f) of

  1:begin

      b_l:=b_l or trunc(exp(i*ln(2)));

      f:=false;

  end;

  2:f:=true;

  3:begin

      b_l:=b_l or trunc(exp(i*ln(2)));

      f:=true;

  end;

  else

      f:=false;

end;

c_l:=b_l;

if f then begin {если возникло переполнение, сдвинуть мантиссу и

                    увеличить порядок на 1}

for i:=1 to 15 do {sar c_l}

if (((1 shl i) and c_l)<>0) and (((1 shl (i-1)) and c_l)=0)

then c_l:=c_l+(1 shl (i-1)) else

      if (((1 shl i) and c_l)=0) and (((1 shl (i-1)) and c_l)<>0)

         then c_l:=c_l-(1 shl (i-1));

if ((1 shl 15) and c_l)=0 then c_l:=c_l+(1 shl 15); {starshii bit+}

inc(c_h);

end;

end;

 

Write(#10#13,'C[пк]=');

Write_ab(c_h,c_l);

r:=0; t:=0;

 

if ((1 shl 7) and c_h)<>0 then begin

  c_h:=c_h-trunc(exp(7*ln(2))); {знак}

  t:=1; end;

 

{Перевод в десятичную систему счисления}

for i:=0+abs(c_h) downto -15+abs(c_h) do

if ((1 shl (i+15-abs(c_h)) )and c_l)<>0 then

   r:=r+exp((i-1)*ln(2));

 

if t=1 then r := -r;

Write(#10#13,'C= ',r:8:4);

 

a_l:=0; b_l:=0; c_l:=0;

 

 gotoxy(30,35);

textcolor(15);

writeln('Нажмите: Enter - чтобы продолжить и ');

write('                                  1 - чтобы выйти');

d:=readkey;

if (d='1') then halt;

 end;

END.

 

Контрольні запитання

 

6.1. Скільки бітів в одному та двох байтах?

6.2. Чи відрізняються прямий, зворотний і додатковий коди у додатного та у від’ємного числа?

6.3. Враховується чи ні одиниця переносу із старшого знакового розряду під час виконання операції додавання при використанні кодів зворотного та додаткового?

6.4. В чому особливість модифікованих кодів?

6.5. Чим відрізняється зображення числа в двійковому коді з фіксованою та з плаваючою комою?

6.6. Що треба виконати, якщо в знакових розрядах при використанні модифікованих кодів з’являється значення 01 або 10?

 

Зміст звіту

 

7.1. Звіт треба оформити в зошиті для звітів або на аркушах формату А4.

7.2. Звіт може бути роздрукований.

7.3. При оформленні звіту треба використати українську мову.

7.4. В звіті мають бути вказані:

1) номер лабораторної роботи;

2) тема лабораторної роботи;

3) мета її виконання;

4) індивідуальне завдання;

5) результати виконання індивідуального завдання;

6) особливості функціонування демонстраційної програми і результати, отримані при її виконанні;

7) відповіді на контрольні запитання;

8) висновки по даній лабораторній роботі.

 

 










Последнее изменение этой страницы: 2018-04-12; просмотров: 189.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...