Дайте нам
int a, b, c; // may be char or float, anything actually
c = a + b;
пусть тип int будет представлен 4 байтами. Допустим, a + b требует на 1 бит больше, чем 4 байта (то есть, скажем, результат равен 1 00 .... 0 (32 ноля, в двоичном виде)). Это приведет к C = 0, и я уверен, что микропроцессор компьютера установит какой-нибудь флаг переполнения. Есть ли встроенный метод, чтобы проверить это в C?
На самом деле я работаю над созданием числового типа длиной 1024 бита (например, int - это встроенный числовой тип длиной 32 бита). Я попытался сделать это, используя массивы типа unsigned char со 128 элементами. Мне также нужно определить операции сложения и вычитания для этих чисел. Я написал код для сложения, но у меня проблема с вычитанием. Мне не нужно беспокоиться о получении отрицательных результатов, поскольку способ, которым я буду вызывать функцию вычитания, всегда гарантирует, что результат вычитания всегда будет положительным, но для реализации функции вычитания мне нужно каким-то образом получить дополнение 2 к вычитаемому, которое Это мой собственный 1024-битный номер.
Прошу прощения, если мне трудно понять мое описание. При необходимости я уточню это подробнее. Я включил мой код для функции сложения и функции неполного вычитания. NUM_OF_WORDS
является константой, объявленной как
#define NUM_OF_WORDS 128
Пожалуйста, дайте мне знать, если вы не поняли мой вопрос или какую-либо часть моего кода.
PS: Я не вижу, как загружать вложения на этом форуме, поэтому я направляю вас на другой сайт. Мой код можно найти там
нажмите для загрузки на этой странице
Кстати, я нашел это
Я намереваюсь заменить INT_MAX by UCHAR_MAX
, так как мои 1024-битные числа состоят из массива типов символов (8-битная переменная)
Достаточно ли этой проверки для всех случаев?
Обновление:
Да, я работаю над криптографией.
Мне нужно реализовать процедуру умножения Монтгомери для 1024-битных целых чисел.
Я также подумывал об использовании библиотеки GMP, но не смог выяснить, как ее использовать.
Я просмотрел учебник и после нескольких небольших изменений смог создать файл проекта GMP в VC ++ 6, что привело к большому количеству файлов .obj, но теперь я не уверен, что с ними делать.
Тем не менее, было бы хорошо, если бы я мог писать свои собственные типы данных, поскольку это даст мне полный контроль над тем, как работают арифметические операции с моим пользовательским типом данных, и мне также нужно иметь возможность расширять его с 1024 бит до больших чисел в будущее.