Реферат Курсовая Конспект
Навчитись зображувати У прямому, зворотному та додатковому кодах цілі двійкові числа із знаком - раздел Образование, Лабораторна Робота 3 ...
|
Лабораторна робота 3
МАШИННІ КОДИ. ДОДАВАННЯ ТА ВІДНІМАННЯ ЦІЛИХ ДВІЙКОВИХ ЧИСЕЛ
Мета роботи
У результаті виконання лабораторної роботи:
· навчитись зображувати У прямому, зворотному та додатковому кодах цілі двійкові числа із знаком;
· навчитись використовувати вказані коди для виконання операцій додавання та віднімання цілих двійкових чисел із знаком.
Теми для попереднього пророблення
3.2.1.Особливості зображення цілих додатних і від’ємних двійкових чисел в прямому, зворотному та додатковому кодах.
3.2.2.Правила додавання двійкових цифр.
3.2.3.Модифіковані зворотний і додатковий коди.
Перевірка за допомогою демонстраційної програми правильності результатів, отриманих під час виконання індивідуального завдання у відповідності до п.3.4
3.5.1. Спочатку треба вручну отримати результати для свого індивідуального завдання і заповнити всі позиції в таблицях 2 і 3, як указано в п.3.3.2 для варіанта 30 із таблиці 3.1.
3.5.2. Перевірити правильність заповнення всіх клітинок у таблицях 3.2 і 3.3 за допомогою демонстраційної програми, текст якої розміщений нижче.
3.5.3. Демонстраційну програму треба запустити на виконання в одному з середовищ, яке підтримує програмування на мові Pascal.
3.5.4. Текст демонстраційної програми.
program summirovan;
uses crt;
var
a,b:integer; {Введенные числа}
{Те же числа, но в кодах}
a_pr,b_pr:word;
a_ok,b_ok:word;
a_dk,b_dk:word;
d :char;
function plusdk(a,b:word):word; {Сложение в дополнительном коде}
var
trans:word; {Бит переноса}
digit:word; {Текущий бит}
result:word; {Для хранения промежуточного результата }
{при вычислении бита переноса}
c:word; {Сумма}
i:byte; {Счетчик}
begin
trans:=0;
for i:=0 to 7 do begin
digit:=(a and (1 shl i)) xor (b and (1 shl i)) xor (trans shl i);
if digit=0 then c:=c and (255 xor (1 shl i))
else c:=c or (1 shl i);
result:=(a and (1 shl i))and(b and(1 shl i));
result:=result or ((b and(1 shl i))and(trans shl i));
result:=result or ((a and (1 shl i))and(trans shl i));
if result<>0 then trans:=1 else trans:=0;
end;
plusdk:=c; {Возвращение результата}
end;
function plusok(a,b:word):word; {Сложение в обратном коде}
var
trans,digit,result:word;
c:word;
i:byte;
begin
trans:=0;
for i:=0 to 7 do begin
digit:=(a and (1 shl i)) xor (b and (1 shl i)) xor (trans shl i);
if digit=0 then c:=c and (255 xor (1 shl i))
else c:=c or (1 shl i);
result:=(a and (1 shl i)) and (b and (1 shl i));
result:=result or ((b and (1 shl i))and(trans shl i));
result:=result or ((a and (1 shl i))and(trans shl i));
if result<>0 then trans:=1 else trans:=0;
end;
if trans=1 then c:=plusok(c,1); {Перенос из знакового разряда }
{прибавляется к младшему разряду}
plusok:=c;
end;
function bdtos(a:word):string; {Преобразование битов числа в строку}
var
i:byte;
s:string;
begin
s:='';
for i:=7 downto 0 do
s:=s+chr(ord(((1 shl i) and a)<>0)+48);
bdtos:=s;
end;
function prtoi(a:word):integer; {Преобразование из прямого кода в integer}
begin
if a<127 then prtoi:=a
else prtoi:=-(a and 127);
end;
function itopr(a:integer):word; {Преобразование из integer в прямой код}
begin
if a>=0 then itopr:=a
else itopr:=abs(a) or (1 shl 7);
end;
function prok(a:word):word;{Преобразование из прямого кода в обратный }
{и наоборот}
begin
if a<127 then prok:=a
else prok:=(not a) or (1 shl 7);
end;
function prdk(a:word):word; {Преобразование из прямого кода в дополнительный }
{и наоборот}
begin
if a<127 then prdk:=a
else prdk:=plusdk((not a) or (1 shl 7),1);
end;
begin
while true do
begin
clrscr;
write('Введите A и B через пробел: ');
readln(a,b);
a_pr:=itopr(a);
b_pr:=itopr(b);
a_ok:=prok(a_pr);
b_ok:=prok(b_pr);
a_dk:=prdk(a_pr);
b_dk:=prdk(b_pr);
writeln(' [A]пк = ',bdtos(a_pr));
writeln(' [B]пк = ',bdtos(b_pr));
writeln(' [A]ок = ',bdtos(a_ok));
writeln(' [B]ок = ',bdtos(b_ok));
writeln(' [A]дк = ',bdtos(a_dk));
writeln(' [B]дк = ',bdtos(b_dk));
writeln('Результат в обратном коде:');
writeln(' [A]oк+[B]oк = ',bdtos(plusok(a_ok,b_ok)));
writeln('Результат в дополнительном коде:');
writeln(' [A]дк+[B]дк = ',bdtos(plusdk(a_dk,b_dk)));
write('Результат в прямом коде:');
writeln(bdtos(prdk(plusdk(a_dk,b_dk))));
writeln('Результат в 10-м коде:');
writeln(' [A]дес+[B]дес = ',prtoi(prdk(plusdk(a_dk,b_dk))));
gotoxy(30,25);
textcolor(15);
writeln('Нажмите: Enter - чтобы продолжить и ');
write(' 1 - чтобы выйти');
d:=readkey;
if (d='1') then halt;
end;
end.
– Конец работы –
Используемые теги: Навчитись, зображувати, прямому, зворотному, додатковому, кодах, цілі, Двійкові, числа, знаком0.132
Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Навчитись зображувати У прямому, зворотному та додатковому кодах цілі двійкові числа із знаком
Если этот материал оказался полезным для Вас, Вы можете сохранить его на свою страничку в социальных сетях:
Твитнуть |
Новости и инфо для студентов