- •Flint/c
- •Если обнаруживается переполнение или потеря значимости, арж метическая функция возвращает соответствующий код ошибки
- •E clint ufl Потеря значимости
- •1. Операции ввода, вывода и преобразования больших чисел
- •1.2 Преобразование переменных типа clint в базовые типы
- •1.3 Дополнительные операции с cLlNt-объектами
- •1.4Основные арифметические операции с большими числами типа clint
Если обнаруживается переполнение или потеря значимости, арж метическая функция возвращает соответствующий код ошибки
Код ошибки Интерпретация
E_CLINT_BOR Недопустимое основание в str2clint_l()
E_CL1NT_DBZ Деление на нуль
E_CLINT_MAL Ошибка при распределении ресурсов памяти
E_CLINT_MOD Четные модули в умножении по Монтгомери
E_CLINT_NOR Регистр недоступен
E_CLINT_NPT Пустой указатель в качестве аргумента
E_CLINT_OFL Переполнение
E clint ufl Потеря значимости
1. Операции ввода, вывода и преобразования больших чисел
Инициализация переменных типа CLINT
Ввод начальных значений (инициализация) в переменную типа CLINT не может быть осуществлен операцией присваивания , а должен производится только одной из следующих функций преобразования:
числа типа ULONG(unsigned long unt) в CLINT
строки символов в CLINT
вектора ,элементами которого являются байты, в CLINT
Преобразование значения типа ULONG в CLINT-объект
Синтаксис: void ul2clint_l (CLINT num, ULONG ul);
Вход: ul (преобразуемое значение)
Выход: num (выходной CLINT-объект)
Преобразование строки в CLINT-объект
Синтаксис: int str2clint_l (CLINT n, char *str, USHORT base);
Вход: str -указатель на последовательность типа char
base -основание числового представления строки,
2 <= base<=16
Выход: n (выходной CLINT-объект)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_BOR, если base < 2 или base > 16
E_CLINT_OFL в случае переполнения
E_CLINT_NPT, если в str передан пустой указатель
Преобразование байтового вектора в CLINT-объект
Синтаксис: int byte2clint_l (CLINT n, UCHAR* bytstr, int len);
Вход: bytestr (указатель на последовательность типа UCHAR) len (длина байтового вектора)
Выход: n_l (выходной CLINT-объект)
Возврат: E_CLINT_OK, если все в порядке
E_CLINT_OFL в случае переполнения
E_CLINT_NPT, если bytstr пустой указатель
#include <FLINT.h>
#include <stdio.h>
#include <conio.h>
#define ClintToStr xclint2str_l // Переопределение функции xclint2str_l
int main(int argc, char* argv[])
{
CLINT a1,a2,a3; // Объявление объектов CLINT
// Инициализация объекта CLINT строкой цифр
char *s1 =new char; s1="9293490"; // Строка 10-х цифр
printf("S1= %s\n",s1);
str2clint_l (a1,s1,10); //Инициализация строкой
printf("BIN %s\n",ClintToStr(a1,2,1));
printf("OCT %s\n",ClintToStr(a1,8,1));
printf("DEC %s\n",ClintToStr(a1,10,1));
printf("HEX %s\n",ClintToStr(a1,16,1));
char *s2 =new char;s2="0FAA56CD"; // Строка 16-х цифр
printf("\nS2= %s\n",s2);
str2clint_l (a2,s2,16); //Инициализация строкой
printf("BIN %s\n",ClintToStr(a2,2,1));
printf("OCT %s\n",ClintToStr(a2,8,1));
printf("DEC %s\n",ClintToStr(a2,10,1));
printf("HEX %s\n",ClintToStr(a2,16,1));
char *s3 =new char;s3="00101010"; // Строка 2-х цифр
printf("\nS3= %s\n",s3);
str2clint_l (a3,s3,2); //Инициализация строкой
printf("BIN %s\n",ClintToStr(a3,2,1));
printf("OCT %s\n",ClintToStr(a3,8,1));
printf("DEC %s\n",ClintToStr(a3,10,1));
printf("HEX %s\n",ClintToStr(a3,16,1));
// Инициализация объекта CLINT числом
ULONG b=19000; // Переменная типа ULONG(unsigned long int)
u2clint_l(a1,b);
printf("\n a1 <- b= %s\n",ClintToStr(a1,10,1));
// Инициализация объекта CLINT массивом байт
unsigned char B[]={0,1,5}; byte2clint_l(a1,B,3);
printf("\n a1 <-[B] DEC = %s\n",ClintToStr(a1,10,1));
return 0;
}
Рисунок Применение функции ввода-вывода