Концепция типа данных
Основная цель любой программы состоит в обработке данных. Данные различного типа хранятся и обрабатываются по-разному. В любом алгоритмическом языке каждая константа, переменная, результат вычисления выражения или функции должны иметь определенный тип.
Тип данных определяет:
- внутреннее представление данных в памяти компьютера;
- множество значений, которые могут принимать величины этого типа;
- операции и функции, которые можно применять к величинам этого тина.
Исходя из этих характеристик, программист выбирает тип каждой величины, используемой в программе для представления реальных объектов. Обязательное описание типа позволяет компилятору производить проверку допустимости различных конструкций программы. От типа величины зависят машинные команды, которые будут использоваться для обработки данных.
Данные разного типа обрабатываются с разной скоростью. Целочисленные данные обрабатываются быстрее всего. Для обработки данных двойной точности используется специальный сопроцессор. Однако из-за сложности внутреннего представления данных с плавающей точкой, они обрабатывается дольше, чем целочисленные. Дольше всего обрабатываются строковые данные. Это связано с динамическим распределением-перераспределением оперативной памяти компьютера.
Основные типы данных:
- целые числа (int)
- логические (bool)
- литералы (char)
- строки (string)
- с плавающей точкой (double)
- цвет (color)
- дата и время (datetime)
Типы color и datetime имеют смысл только для удобства представления и ввода параметров, задаваемых извне — из таблицы свойств советника или пользовательского индикатора (вкладка «Inputs»). Данные типов color и datetime представляются в виде целых чисел. Целые типы вместе с типами с плавающей точкой называются арифметическими (числовыми) типами.
В выражениях используется только неявное приведение типов.
Целые числа (int)
Десятичные: цифры 0-9; первой цифрой не должен быть 0.
Примеры:
17, 253, -482, 28172
Шестнадцатеричные: цифры 0-9, буквы а — f или А — F для значений 10-15; начинаются с 0х или 0Х.
Примеры:
0x1A, 0x23, 0x12, 0x4d, 0xB8, 0xC7, 0x9F4
Внутреннее представление — длинное целое число размером 4 байта. Целые числа могут принимать значения от -2147483648 до 2147483647. Если число превышает указанный диапазон, то результат не определен.
Символьные константы
Символьная константа – это некоторый символ алфавита, заключенный в одиночные кавычки: ‘<символ_алфавита>’ .
Примеры символьных констант:
‘a‘ ‘D‘ ‘=’ ‘+’ ‘k‘ ‘[‘ ‘m‘.
Значением символьной константы является целое число, равное ASCII-коду (American Standard Code for Information Interchange, Американский стандартный код обмена информацией) данного символа. Символьная константа имеет тип int(char) и представляется 16(8)-битной величиной.
Некоторые символы, например, одинарные кавычки (‘), двойные кавычки («), знак вопроса (?), обратная косая черта (\) и управляющие символы можно представлять комбинацией символов, начинающейся с обратной косой черты(\), в соответствии с приводимой ниже таблицей:
новая строка (перевод строки) NL (LF) \n
горизонтальная табуляция HT \t
возврат каретки CR \r
обратная косая черта \ \\
одинарная кавычка ‘ \’
двойная кавычка » \»
шестнадцатеричный ASCII-код hh \xhh
Если за обратной косой чертой следует символ, отличный от перечисленных, результат не определяется:
int a = 'A'; int b = '$'; int c = '©'; // код 0xA9 int d = '\xAE'; // код символа ®
Внутреннее представление — длинное целое число размером 4 байта. Символьные константы могут принимать значения от 0 до 255. Если константа превышает указанный диапазон, то результат не определен
Логические константы (bool)
Логические константы имеют значение true (истина) или false (ложь), числовое представление которых 1 или 0 соответственно. Могут использоваться написания True, TRUE, False и FALSE.
Примеры:
bool a = true; bool b = false; bool c = 1;
Внутреннее представление — длинное целое число размером 4 байта. Логические константы могут принимать значения 0 и 1.
Константы с плавающей точкой (double)
Константы с плавающей точкой состоят из целой части, точки (.) и дробной части. Целая и дробная части представляют собой последовательности десятичных цифр.
Примеры:
double a = 12.111; double b = -956.1007; double c = 0.0001; double d = 16;
Внутреннее представление — число двойной точности размером 8 байт. Пределы изменения от -1.7 * e-308 до 1.7 * e308. Точность обеспечивается не более, чем 15 значащими цифрами.
Строковые константы (string)
Строковая константа — это последовательность символов, заключенная в кавычки, например:
«This is a character string»
«Это строковая константа»
«Символ копирайта\t\xA9»
«эта строка содержит символ перевода строки \n»
«C:\\Program Files\\MetaTrader 4»
Кавычки не входят в строку, а лишь ограничивают её. Технически строковая константа представляет собой массив символов, и по этому признаку может быть отнесена к разряду сложных объектов языка Си.
Если необходимо ввести в строку двойную кавычку («), то перед ней надо поставить символ обратной косой черты (\). В строку могут быть введены любые специальные символьные константы, перед которыми стоит символ обратной косой черты (\). Длина строковой константы — от 0 до 255 символов. Если длина строковой константы превосходит максимальную, лишние символы справа отбрасываются, и компилятор выдает соответствующее предупреждение.
Внутреннее представление — структура размером 8 байт. Первый элемент структуры — длинное целое, содержит размер распределенного для строки буфера. Второй элемент структуры — 32-разрядный адрес буфера, содержащего строку
Цветовые константы (color)
Цветовые константы могут быть представлены тремя различными способами: литерально, целочисленно или при помощи имени (только для именованных Web-цветов).
Литеральное представление состоит из трех частей, представляющих числовые значения интенсивности трех основных компонент цвета: красной (red), зеленой (green), синей (blue). Константа начинается с символа C и обрамляется одинарными кавычками. Числовые значения интенсивности компоненты цвета лежат в диапазоне от 0 до 255.
Целочисленное представление записывается в виде шестнадцатеричного или десятичного числа. Шестнадцатеричное число имеет вид 0x00BBGGRR, где RR — значение интенсивности красной компоненты цвета, GG — зеленной, а BB — синей. Десятичные константы не имеют прямого отражения в RGB. Они представляют собой десятичное значение шестнадцатеричного целочисленного представления.
Именованные цвета отражают так называемый набор Web-цветов.
Примеры:
// литералы
C’128,128,128′ // серый
C’0x00,0xFF,00′ // зелёный
//названия цветов
Red // красный
Yellow // желтый
Black // черный
// целочисленные представления
0xFFFFFF // белый
16777215 // белый
0x008000 // зеленый
32768 // зеленый
Внутреннее представление — длинное целое число размером 4 байта. Первый байт не учитывается. Остальные 3 байта содержат RGB-составляющие.
Константы даты и времени (datetime)
Константы даты и времени могут быть представлены в виде символьной строки, которая состоит из 6 частей, представляющих числовое значение года, месяца, числа (либо числа, месяца, года), часа, минуты и секунды. Строка константы обрамляется одинарными кавычками и начинается с символа D. Может опускаться либо дата (год, месяц, число), либо время (часы, минуты, секунды), либо все вместе. Диапазон значений от 1 января 1970 года до 31 декабря 2037 года.
Примеры:
D’2017.01.01 00:00′ // Новый Год
D’1994.12.08 09:44:36′
D’19.07.1980 12:30:27′
D’23.04.1976 17′ //равнозначно D’1976.04.23 17:00:00′
D’01.01.2017′ //равнозначно D’01.01.2017 00:00:00′
D’16:45:15′ //равнозначно D'[дата компиляции] 16:45:15′
D» //равнозначно D'[дата компиляции] 00:00:00′
Внутреннее представление — длинное целое число размером 4 байта. Значение представляет собой количество секунд, прошедшее с 00:00 1 января 1970 года.