Форум программистов, компьютерный форум, киберфорум
Наши страницы
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Другие темы раздела
Pascal Найти количество положительных и отрицательных чисел среди чисел заданного вида http://www.cyberforum.ru/pascal/thread1414606.html
Найти количество положительных и отрицательных чисел среди чисел вида: sin x n при х=1,13; n=1…30
Упорядочить элемент V в порядке возрастания их модулей с помощью подпрограммы Pascal
Упорядочить элемент V в порядке возрастания их модулей с помощью подпрограммы
Написать программу перемножения двух данных целочисленных матриц размером 5х5 Pascal
Написать программу перемножения двух данных целочисленных матриц размером 5х5.
Pascal Напишите программу, которая определяет, попала ли точка с заданными координатами в заштрихованную область Напишите программу, которая определяет, попала ли точка с заданными координатами в заштрихованную область. Входные данные Входная строка содержит два вещественных числа – координаты точки на... http://www.cyberforum.ru/pascal/thread1414491.html
Pascal Bcтaвить в oднoмepный мaccив пocлe кaждoгo нeчeтнoгo чиcлa — чиcлo 2 http://www.cyberforum.ru/pascal/thread1414489.html
Задание: Bcтaвить в oднoмepный мaccив пocлe кaждoгo нeчeтнoгo чиcлa - чиcлo 2. Вот наработок, только он вместо 5-го элемента подставляет 2. Помогите пожалуйста исправить, и объяснить если не...
Написать программу перемножения двух данных целочисленных матриц Pascal
Написать программу перемножения двух данных целочисленных матриц размером 5х5
Pascal Записи. Считать из файла базу данных. Найти самого старшего человека из Москвы
В базе данных 14 человек. ФИО/Дата рождения/Город/Номер телефона 1) Вывести данные в виде таблицы. 2) Найти и вывести на экран имя и фамилию самого старшего человека из Москвы. %-) Вот только...
Pascal Определите, какое число будет напечатано в результате выполнения следующего алгоритма Всем привет! Я, быть может, вовсе оглупел, но не могу решить две следующие задачи... Первая задача: Определите, какое число будет напечатано в результате выполнения следующего алгоритма: var... http://www.cyberforum.ru/pascal/thread1414036.html
Pascal Проверить, все ли цифры введенного числа различны http://www.cyberforum.ru/pascal/thread1414035.html
Проверить, все ли цифры введенного числа различны. 1)цикл с предусловием 2)цикл по параметру Помогите пожалуйста
Pascal Интегрированные структуры данных, записи Для заданной прикладной области разработать описание объектов этой области. Разработать процедуры, реализующие базовые операции над этими объектами, в частности: текстовый ввод-вывод (консольный и... http://www.cyberforum.ru/pascal/thread1414032.html
ZX Spectrum-128
Модератор
Эксперт Pascal/Delphi
5054 / 3514 / 4091
Регистрация: 05.06.2014
Сообщений: 17,746
07.05.2017, 20:23 0

Умножение двоичных чисел в дополнительном коде

07.05.2017, 20:23. Просмотров 1642. Ответов 11
Метки (Все метки)

Ответ

Безо всяких изменений работает в fpc.

Вариант для pabc.net ниже:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
program mult;
 
var
  f: Text;
 
procedure StrToInt(s: string; var a: longint);
var
  i: integer;
  Sign: boolean;
  start: integer;
  code: integer;
  d: longint;
begin
  Sign := (s[1] = '-');
  if Sign then
    start := 2
  else
    start := 1;
  a := 0;
  for i := start to Length(s) do
  begin
    Val(s[i], d, code);
    if code <> 0 then
      exit;
    a := a * 10 + d;
  end;
    {если число должно быть отрицательным - переводим в дополнительный код}
  {способ преобразования взят из "http://ru.wikipedia.org/wiki/Дополнительный_код_(представление_числа)"
   и адаптирован к 32 битному типу LongInt}
  if Sign then
    a := ((not a) or $80000000) + 1;
end;
 
procedure IntToBin(a: longint; var s: string);
var
  i: integer;
  Mask: longint;
begin
  (*  {$ifopt R+} {временно отключим контроль переполнения}
      {$R-}
      {$define ReqSet_OptR}
    {$endif}*)
  s := '';
  Mask := $80000000;
  for i := 1 to 8 * sizeof(string) do
  begin
    if (Mask and a) <> 0 then
      s := s + '1'
    else
      s := s + '0';
    Mask := Mask shr 1;
  end;
  {$ifdef ReqSet_OptR}
  {$R+}
  {$undef ReqSet_OptR}
  {$endif}
end;
 
procedure Mul(a, b: longint; var Res: longint);
var
  i: integer;
  Mask: longint;
  s: string;
begin
  IntToBin(a, s);
  WriteLn(f, s);
  WriteLn(f, 'x');
  IntToBin(b, s);
  WriteLn(f, s);
  WriteLn(f, '--------------------------------');
  Res := 0;
  Mask := 1;
  for i := 1 to 8 * sizeof(longint) do
  begin
    (*    {$Q-}
        {$ifopt R+} {временно отключим контроль переполнения}
          {$R-}
          {$define ReqSet_OptR}
        {$endif}*)
    if (Mask and b) <> 0 then
    begin
      Res := Res + a;
      IntToBin(a, s);
      WriteLn(f, s);
    end
      else
    begin
      IntToBin(0, s);
      WriteLn(f, s);
    end;
    a := a shl 1;
    Mask := Mask shl 1;
    (*   {$ifdef ReqSet_OptR}
    {$R+}
    {$undef ReqSet_OptR}
    {$endif}*)
  end;
  WriteLn(f, '--------------------------------');
  IntToBin(Res, s);
  WriteLn(f, s);
end;
 
var
  c1, c2, c3: longint;
  s: string;
 
begin
  WriteLn('Enter 1st number: ');
  ReadLn(s);
  StrToInt(s, c1);
  WriteLn('Enter 2nd number: ');
  ReadLn(s);
  StrToInt(s, c2);
  
  Assign(f, 'Log.txt');
  Rewrite(f);
  
  WriteLn(f, c1, '*', c2);
  
  Mul(c1, c2, c3);
  
  WriteLn(f, 'Result: ', c3);
  WriteLn(f, 'Etalon: ', c1 * c2);
  Close(f);
end.


Вернуться к обсуждению:
Умножение двоичных чисел в дополнительном коде
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2017, 20:23
Готовые ответы и решения:

Умножение двух двоичных чисел
Помогите создать подпрограмму для умножения двух чисел в двоичной системе!(паскаль)

Сложение и вычитание двух целых чисел в дополнительном коде
Составьте программу представления в двоичном виде (ввод и вывод в виде 8 нулей и единиц для каждого...

Сложение вычитание в двоичном дополнительном коде
Люди помогите плизззззз.Мне нужна прога на паскале.Тема:Сложение вычитание в двоичном...

Перевести числа из шестнадцатеричной записи в семеричную в обратном или дополнительном коде
Помогите пожалуйста..Уже несколько дней сижу и ничего не выходит..:wall: Исходный файл содержит...

Деление двоичных чисел столбиком
Всем доброго времени суток! Пытаюсь реализовать алгоритм деления двоичных чисел столбиком на...

11
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.