ЛАБОРАТОРНАЯ РАБОТА № 5

Операции над многословными операндами

 

1. Многословные операнды

 

Арифметические выражения в языке C представляют собой формулы для вычисления значений. Они состоят из операндов: переменные, константы и т.д.; и операций: сложение, вычитание и т.д. В качестве операндов могут использоваться как простые типы переменных (int, float...), так и структурированные (массивы, множества...). В последнем случае операнды называются многословными для операций над ними в большинстве случаев необходимо писать программы.

В данной лабораторной работе необходимо сложить и вычесть два целых числа. В простейшем случае эти операции выполнялись бы достаточно просто, например: a=x+y; b=x-y; (если типы чисел простые). Однако исходные целые числа не укладываются в стандартное определение простых типов переменных, они представлены в виде массивов байтов (по условию задачи), поэтому возникает необходимость программирования специальных процедур сложения и вычитания. Оба массива одномерные, размером (для конкретной задачи) - не более 6 байт. Пусть в первом байте хранится знак числа, а в остальных - его значащие двоичные цифры (будем это представление считать прямым кодом числа). Исходные массивы (числа) желательно записать в виде шестнадцатеричных констант в технологической части программы.

Необходимо предусмотреть все возможные варианты соотношений исходных данных: числа могут быть как одного знака, так и разных знаков; вычитаемое меньше уменьшаемого (по модулю) и наоборот; результат сложения «не вписывается» в массив результата (переполнение) и т.д.

Алгебраическое сложение двух чисел удобно выполнять в дополнительном коде: суммируются все разряды чисел, включая знаковый, а при возникновении переноса из знакового разряда он (перенос) игнорируется. Знаковый разряд суммы (0 –«+», 1 – «-») при этом формируется автоматически, и сама сумма получается в дополнительном коде. Дополнительным кодом положительного числа является прямой код этого числа. Для получения дополнительного кода отрицательного числа необходимо при просмотре цифр числа справа налево оставить неизменными все цифры «0» и первую встреченную цифру «1», все остальные цифры, за исключением знака числа, проинвертировать. Перевод отрицательного числа из дополнительного кода в прямой можно выполнить по этому же правилу.

 

2. Задание на лабораторную работу

 

Написать функцию алгебраического сложения двух целых чисел, каждое из которых представлено массивом байтов. Первый байт массива содержит код знака числа: 0 - ‘+’, 225 - ‘-‘, а остальные байты- значащие двоичные цифры числа.