Пропустить навигацию.
Главная

Основные типы данных в системах BCB и Delphi

В программах на Си и Паскале все переменные должны быть объявлены. Причем Паскаль предъявляет гораздо более жесткие требования — описание переменных должно предшествовать первому исполняемому оператору программы. Язык С++ более либерален — он позволяет объявлять переменные по ходу программы, но использует специальное соглашение по поводу области видимости (доступности) таких переменных. Например, переменная j, объявленная в цикле, после выхода из цикла становится недоступной:

for(int j=0, s=0; j<n; j++) s=s+a[j];

Зона видимости переменной, объявленной внутри функции Си, является блок, в котором такое описание появилось. Это не согласуется с тем, что было реализовано в системе Borland C++ 3.1. Там зона видимости переменной распространялась и на ту часть функции, которая находилась ниже блока. Но в BCB стандарт C++ соблюдается более четко.

Принципиальной новинкой в Delphi является возможность задания начального значения переменной в строке объявления. Раньше Паскаль допускал такое присвоение только в разделе const, и из книги в книгу кочевали такие несуразицы как типизированные константы. На самом деле, это были обычные переменные, но уж слишком долго Паскаль не разрешал того, что было принято в большинстве алгоритмических языков. Кстати, Visual Basic пока еще до этого удобного способа не созрел.

По сравнению с системой Visual Basic целочисленные данные в BCB и Delphi в каждом из форматов (1, 2, и 4 байт) допускают по два варианта представления — со знаком и без знака (табл. 1.3). Кроме того, здесь появились целочисленные данные учетверенной длины (8 байт), которые немного отличаются от данных типа Currency.

Диапазон вещественных данных по сравнению с Visual Basic здесь расширен за счет 10-байтовых чисел с плавающей запятой, имеющих до 19–20 верных значащих цифр.

Логические значения, похожие на общепринятые true или false, а также логические операции, в том числе и поразрядные, в Си были известны с самого начала. Однако в качестве логических значений выступали данные целочисленного типа или их отдельные биты, а знаки общепринятых логических операций (OR, AND, XOR, NOT) были заменены очень специфической символикой (|, &, ^, !, ~, &&, ||). Появление данных типа bool приблизило Си к общепринятой схеме обозначений, хотя и не внесло ничего принципиально нового.

Данные типа Currency перекочевали из входного языка VB сначала в систему Delphi, а потом и в BCB. Над денежными единицами в классе Currency определены все арифметические операции, свойственные целочисленным данным в языке Си:

+, +=, ++, -, -=, --, *, *=, /, /=, %, %=

Данные типа Currency можно сравнивать (>, >=, <, <=, ==, !=). Им можно присваивать любые целочисленные или вещественные значения из допустимого интервала. Для преобразования денежных единиц в строку программа может воспользоваться функцией AnsiString:

Currency s=s1+s2;

ShowMessage(AnsiString(s));

Множества впервые появились в Паскале. В соответствующий класс BCB их идеология перенесена в несколько урезанном виде. Элементами класса Set могут быть данные типа int, char или enum, принадлежащие ограниченному интервалу от минимального значения (min) до максимального значения (max) и содержащие не более 256 элементов. Минимальное значение должно быть не менее 0, а максимальное — не более 255.

Объявить множество можно явно или косвенно:

Set <char,'A','Z'> s1; //множество s1 больших букв от A до Z

typedef Set <int, 10,20> Num10_20;

Num10_20 s2,s3; // два множества целых чисел от 10 до 20

enum M_K_Key (ssShift, ssAlt, ssCtrl, ssLeft, ssRight,

ssMiddle, ssDouble); //управляющие клавиши

typedef Set<M_K_Key,ssShift,ssDouble> TShiftState;

TShiftState Shift; //множество управляющих клавиш

После объявления любое множество является пустым и его заполнение возлагается на программу. Подключение элемента из допустимого интервала осуществляется с помощью операции <<:

s1 << 'A'<< 'C';

s2 << 12 << 10 << 19;

MessageDlg(as,mtInformation,TMsgDlgButton<<mbOk<<mbCancel,0);

Операция >> используется для исключения элемента из множества:

s2 >> 19;

С помощью метода Clear можно удалить все данные из множества:

s1.Clear();

Для проверки на принадлежность элемента множеству предназначен метод Contains:

bool b1=s1.Contains('C')

Он возвращает значение true, если указанный элемент в данный момент принадлежит множеству.

Над элементами двух множеств определены стандартные операции объединения (операция + или +=), пересечения (операция * или *=) и вычитания (операция - или
-=). Два множества можно сравнивать на совпадение (операция ==) или несовпадение (операция !=).

Данные типа Variant, впервые появившиеся в VB, были предназначены для обмена разнотипной информацией. При каждом таком значении хранятся сведения о его типе, а класс Variant снабжен сервисными программами по преобразованию данных одного типа в другой. В качестве значений типа Variant система BCB допускает использование практически всех числовых данных (short, int, float, double, Currency, TDateTime), логических величин (bool, WordBool), указателей на строки (char *, AnsiString&, wchar_t *) и объекты типа OLE Automation. В последнем случае значение типа Variant может использоваться для опроса/установки свойств OLE-объекта или вызова его методов.

Таблица 1.3

Тип Delphi Тип BCB Диапазон Формат
Целые числа
ShortInt signed char от -128 до 127 8 бит со знаком
Byte unsigned char от 0 до 255 8 бит без знака
SmallInt short от -32768 до 32767 16 бит со знаком
Word unsigned short от 0 до 65567 16 бит без знака
Integer, Longint integer,
long
от -2147483648

до 2147483647

32 бита со знаком
Cardinal unsigned int от 0 до 4294967295 32 бита без знака
Int64 int64 от -263 до 263-1 64 бита со знаком
Currency Currency от -922337203685477.5808

до + 922337203685477.5807

64 бита со знаком (*10-4)
Вещественные числа
Single, Real float от -3.4*1038 до-1.4*10-45 , 0

и от 1.4*10-45 до 3.4*1038

32 бита, пл. зпт.
Double double от -1.8*10308 до -4.9*10-324, 0

и от 4.9*10-324 до 1.8*10308

64 бита, пл. зпт.
Comp Comp от -263 до 263-1 64 бита, пл.зпт.
Extended long double от -1.1*104932 до -3.4*10-4932, 0

и от 3.4*10-4932 до 1.1*104932

80 бит, пл. зпт.
Логические данные
Boolean bool true или false 8 бит
ByteBool unsigned char true/false или целое без знака 8 бит
WordBool true/false или целое без знака 16 бит
LongBool BOOL true/false или целое без знака 32 бита
Символьные (строковые) данные
Char, AnsiChar char 8-битовый символ 8 бит
WideChar wchar_t 16-битовый символ (Unicode) 16 бит
String[n] SmallString<n> строка до 255 символов
String,

AnsiString

AnsiString длинная строка до 2 Гбайт
PChar unsigned char * указатель на строку 32 бита
Указатель без типа
Pointer void * 32 бита
Календарные даты и время
TDateTime TDateTime 64 бита