2.1 Data Type Summary. Список типов.
Ниже представлены типы данных, их размеры и диапазоны значений.
- Byte. Размер: 1 байт. Значения: 0…255.
- Boolean. Размер: 2 байта. Значения: True (Истина) или False (Ложь).
- Integer. Размер: 2 байта. Значения: -32768…32767.
- Long (long integer). Размер: 4 байта. Значения: -2147483648…2147483647.
- LongLong (LongLong integer). Размер: 8 байт. Значения: -9223372036854775808…9223372036854775807 (актуален только для 64-битных платформ).
- LongPtr (Long integer для 32-битных систем, LongLong integer для 64-битных систем). Размер: 4 байта для 32-битных систем, 8 байт для 64-битных систем. Значения: -2147483648…2147483647 для 32-битных систем, -9223372036854775808…9223372036854775807 для 64-битных систем.
- Single (число одинарной точности с плавающей точкой (запятой)). Размер: 4 байта. Значения: -3.402823E38…-1.401298E-45 для отрицательных значений; 401298E-45…3.402823E38 для положительных значений.
- Double (число двойной точности с плавающей точкой (запятой)). Размер: 8 байт. Значения: -1.79769313486231E308…-4.94065645841247E-324 для отрицательных значений; 94065645841247E-324…1.79769313486232E308 для положительных значений.
- Currency (scaled integer). Размер: 8 байт. Значения: -922337203685477.5808 to 922337203685477.5807.
- Decimal. Размер: 14 байт. Значения: +/-79228162514264337593543950335 без десятичной точки (запятой); +/-7,9228162514264337593543950335 с 28 знаками справа от десятичной точки (запятой); наименьшее ненулевое число +/-0,0000000000000000000000000001.
- Date. Размер: 8 байт. Значения: 1 января 100г. – 31 декабря 9999г.
- Object. Размер: 4 байта. Значение: любая ссылка на объект.
- String (variable-length (переменной длины)). Размер: 10 байт плюс длина строки. Значения: от 0 до примерно 2 миллиардов.
- String (fixed-length (фиксированной длины)). Размер: длина строки. Значения: от 1 до приблизительно 65400.
- Variant (with numbers (с числами)). Размер: 16 байт. Значения: любое числовое значение до типа Double.
- Variant (with characters (с символами)). Размер: 22 байта плюс длина строки (24 байта для 64-битной системы). Значения: те же, что и для типа String (variable-length).
- User-defined (using Type). Размер: зависит от количества элементов. Значения: диапазон значений каждого элемента совпадает с диапазоном значений соответствующего типа данных.
Примечание!
Массивы любого типа данных требуют 20 байт памяти плюс 4 байта для каждого измерения массива, плюс байты под сами данные. Память, необходимая под данные, может быть рассчитана путём умножения количества элементов данных на размер каждого соответствующего элемента. Например, данные в одномерном массиве, состоящие из 4 элементов данных типа Integer по два байта занимают 8 байтов. Получается данные массива займут 8 байтов плюс 24 байта на нужды памяти, итого 8 + 24 = 32 байта потребуется для массива. На 64-битных платформах SAFEARRAY (размерность массива) занимает 24 бита (плюс 4 байта на оператор Dim). Элемент pvData является 8-байтовым указателем и должен быть выровнен по 8-байтным границам.
Примечание!
LongPtr не является по-настоящему типом данных, поскольку он преобразуется в Long в 32-битных системах, или в LongLong в 64-битных системах. LongPtr должен использоваться для представления значений указателя и дескриптора в объявленных переменных и позволяет записывать переносимый код, который работает как в 32-разрядной системе, так и в 64-разрядной. Variant содержащий массив занимает на 12 байт больше, чем если бы массив был один.
Примечание!
Используйте функцию StrConv для конвертации строкового типа данных в другой тип.
2.2 Boolean Data Type. Булевский тип данных.
Булевские переменные представлены 16-битными (2-байтовыми) числами, но могут иметь значения только True («Истина») или False («Ложь»).
Булевские переменные отображаются на дисплее в виде:
True или False (если используется Print)
или
#True# или #False# (если используется Write #).
Используйте ключевые слова True («Истина») и False («Ложь»), чтобы присвоить одно из двух состояний логическим переменным.
Когда другие числовые типы преобразуются в Булевские значения, то 0 становится False, а все остальные значения становятся True. Когда Булевские значения преобразуются в другие типы данных, то False становится 0, а True становится -1.
2.3 Byte Data Type. Тип данных Byte.
Переменные типа Byte сохраняются, как целые, беззнаковые, 8-битовые (1-байтовые) числа находящиеся в диапазоне 0 … 255. Тип Byte полезен для хранения двоичных данных.
2.4 Currency Data Type. Тип данных Currency («Денежный»).
Переменные Currency хранятся, как 64-битные (8-байтовые) числа в целочисленном формате, имеют 10000-й масштаб для представления числа с 15 цифрами слева от десятичной запятой и четырьмя цифрами справа от десятичной запятой. Диапазон принимаемых значений: -922337203685477,5808 … 922337203685477,5807. Символ объявления типа Currency это знак (@).
Тип Currency («денежный») полезен для расчётов с деньгами и для расчётов с фиксированной точкой (десятичной запятой), в которых точность особенно важна.
2.5 Date Data Type. Тип данных «Дата».
Переменные Date хранятся, как 64-битные (8-байтовые) числа с плавающей десятичной запятой стандарта IEEE представляющие даты в диапазоне дат 1 января 100 … 31 декабря 9999 и диапазоне времени 0:00:00 … 23:59:59.
Любые распознаваемые даты могут быть присвоены переменными Date. Литералы даты должны заключаться в числовые знаки (#), например:
#January 1, 1993#
или
#1 Jan 93#.
Переменные Date отображают даты в кратком виде согласно настройкам компьютера. Время отображается согласно формату времени (12-часовой или 24-часовой) настроенному в компьютере.
Когда другие числовые типы конвертируются в тип Date, то значения слева от десятичной запятой представляют дату, а значения справа от запятой представляют время. Полночь равна 0, полдень равен 0,5. Отрицательные целые числа представляют даты до 30 декабря 1899 г.
2.6 Decimal Data Type. Тип данных Decimal.
Переменные Decimal хранятся, как 96-битные (12-байтовые) знаковые целые числа с изменяемой дробной десятичной частью. Десятичная часть может содержать цифры справа от десятичной запятой в диапазоне от 0 до 28. Если масштаб равен 0 (знаков после запятой нет), то максимальное число будет +/-79228162514264337593543950335. С 28-ю знаками после запятой максимальное значение будет +/-7,9228162514264337593543950335, а наименьшее ненулевое значение будет +/-0,0000000000000000000000000001.
Примечание!
Тип Decimal может использоваться как Variant, т.е. вы не можете создать переменную с типом Variant. Однако вы можете создать переменную с типом Variant и далее с помощью функции CDec создать подтип Decimal.
2.7 Double Data Type. Тип данных Double.
Переменные Double (с двойной точностью с плавающей точкой (запятой)) хранятся, как 64-битные (8-ми байтовые) с плавающей точкой (запятой) числа стандарта IEEE в диапазоне -1,79769313486231E308 … -4,94065645841247E-324 для отрицательных значений или в диапазоне 4,94065645841247E-324 … 1,79769313486232E308 для положительных значений. Символ объявляющий тип Double является знак (#).
2.8 Integer Data Type. Тип данных Integer («целый»).
Переменные типа Integer хранятся, как 16-битные (2-х байтовые) числа в диапазоне -32768 … 32767.
Вы также можете использовать переменные Integer для представления перечислимых значений. Перечислимое значение может содержать конечный набор уникальных целых чисел, каждый из которых имеет особое значение в контексте, в котором он используется. Перечисленные значения обеспечивают удобный способ выбора среди известного количества вариантов, например black = 0, white = 1 и т.д. В программировании считается хорошим тоном задействовать константы (с использованием оператора Const) для каждого перечисленного значения.
2.9 Long Data Type. Тип данных Long.
Long (long integer – длинные целочисленные) переменные хранятся в виде присвоенных 32-разрядных (4-байтовых) чисел в диапазоне -2147483648…2147483647. Символом объявления типа Long является амперсанд (&).
2.10 LongLong Data Type. Тип данных LongLong.
LongLong (LongLong integer – очень длинные целочисленные) переменные сохраняются, как присвоенные 64-разрядные (8-байтовые) числа в диапазоне -9223372036854775808…9223372036854775807. Символ объявления типа LongLong является каретка (^). Тип LongLong можно объявить только на 64-битных платформах.
2.11 LongPtr Data Type. Тип данных LongPtr.
LongPtr (Long Integer (длинные целочисленные) для 32-битных систем, LongLong Integer (очень длинные целочисленные) для 64-битных систем) переменные хранятся в виде: присвоенных 32-битных (4-байтовых) чисел в диапазоне -2147483648… 2147483647 для 32-битных систем; и присвоенных 64-битных (8-байтовых) чисел в диапазоне -9223372036854775808…9223372036854775807 для 64-битных систем.
Примечание!
LongPtr не является по-настоящему типом данных, поскольку он преобразуется в Long в 32-битных системах, или в LongLong в 64-битных системах. Использование LongPtr позволяет записывать переносимый код, который может работать, как в 32-битной, так и в 64-битной средах. Используйте LongPtr для указателей и дескрипторов.
2.12 Object Data Type. Тип данных Object.
Object (объектные) переменные хранятся, как 32-битные (4-байтовые) адресы, ссылающиеся на объекты. Используя оператор Set можно для переменной Object присвоить любую ссылку на объект.
Примечание!
Хотя переменная, объявленная с типом объекта, достаточно гибкая, чтобы содержать ссылку на любой объект, привязка к объекту, на который ссылается эта переменная, всегда поздняя (привязка во время выполнения). Чтобы принудительно установить раннее связывание (привязка времени компиляции), назначьте ссылку на объект переменной, объявленной с определенным именем класса.
2.13 Single Data Type. Тип данных Single.
Single (число с одинарной точностью с плавающей десятичной точкой (запятой)) переменные хранятся, как 32-битные (4-байтовые) числа стандарта IEEE с плавающей десятичной запятой в диапазоне -3,402823E38…-1,401298E-45 для отрицательных чисел и в диапазоне 1,401298E-45…3,402823E38 для положительных чисел. Символом объявления типа Single является восклицательный знак (!).
2.14 String Data Type. Тип данных String («строка»).
Существует два варианта строк: переменной длины и фиксированной.
- Строка переменной длины вмещает примерно до 2 миллиардов символов (231).
- Строка фиксированной длины вмещает от 1 до примерно 64000 (216) символов.
Примечание!
Строка с фиксированной длиной не может использоваться в модуле класса.
Коды для символов String находятся в диапазоне 0…255. Первые 128 символов (0-127) соответствуют буквам и символам на стандартной клавиатуре США. Эти первые 128 символов такие же, как те, которые определены набором символов ASC||. Вторые 128 символов (128-255) представляют специальные символы, такие как буквы, в международных алфавитах, акценты, символы валюты и дроби. Символом объявления типа String является знак доллара ($).
2.15 User-Defined Data Type. Пользовательский тип данных.
Пользовательский тип – это любой тип данных, который вы объявляете с помощью оператора Type. Пользовательские типы данных могут содержать один или несколько элементов типа данных, массив или ранее определённый пользовательский тип.
Пример 2.15
В примере создадим пользовательский тип данных с тремя элементами. Отметим, что целесообразно разместить процедуру создания типа в заголовке модуля, т.к. потом можно будет обращаться к типу из других процедур.
Public Type MyType
MyName As String
MyBirthDate As Date
MyHeight As Integer
End Type
Разбор кода:
Public Type MyType – в виде процедуры объявляем с помощью слова Type пользовательский тип данных под именем MyType.
MyName As String – объявляем первый элемент с именем MyName типа String.
MyBirthDate As Date – объявляем второй элемент с именем MyBirthDate типа Date.
MyHeight As Integer – объявляем третий элемент с именем MyAge типа Integer.
End Type – закрываем конструкцию объявления типа с элементами.
Примечание от автора!
Так как мы объявили в примере 2.15 пользовательский тип, то можем его использовать. В следующем примере создадим переменную X типа MyType и будем с ней работать.
Public Sub Example2151()
Dim x As MyType
x.MyName = "Alex"
x.MyBirthDate = "01.01.1990"
x.MyHeight = "180"
MsgBox x.MyName
MsgBox x.MyBirthDate
MsgBox x.MyHeight
End Sub
Разбор кода:
Dim x As MyType – объявляем (Dim) переменную (X) имеющую (As) пользовательский тип (MyType).
x.MyName = "Alex" – для переменной (X) выбираем подтип (.MyName) и присваиваем с помощью знака “=” значение Alex.
x.MyBirthDate = "01.01.1990" – для переменной (X) выбираем подтип (.MyBirthDate) и присваиваем (=) значение (01.01.1990).
x.MyHeight = "180" - для переменной (X) выбираем подтип (.MyHeight) и присваиваем (=) значение (180).
MsgBox x.MyName – с помощью функции (MsgBox) выводим на экран сообщение в котором в качестве текста будет значение записанное в x.MyName.
MsgBox x.MyBirthDate – с помощью функции (MsgBox) выводим на экран сообщение в котором в качестве текста будет значение записанное в x.MyBirthDate.
MsgBox x.MyHeight – с помощью функции (MsgBox) выводим на экран сообщение в котором в качестве текста будет значение записанное в x.MyHeight.
2.16 Variant Data Type. Тип данных Variant.
Тип данных Variant – это тип данных для всех переменных, которые явно не объявлены в виде другого типа (с использованием операторов Dim, Private, Public или Static). Тип данных Variant не имеет символа объявления типа.
Variant – это специальный тип данных, который может содержать любые данные, кроме данных типа String fixed-length (строка фиксированной длины). (Тип Variant теперь поддерживает пользовательские типы). Variant может также содержать специальные значения Empty, Error, Nothing и Null.
Вы можете узнать, как обработались данные в Variant с помощью функции VarType или функции TypeName.
Числовые данные могут быть в виде любого целого или действительного числа со значениями в диапазоне -1,797693134862315E308…-4,94066E-324 для отрицательных значений и в диапазоне 4,94066E-324…1,797693134862315E308 для положительных значений. Как правило, числовые данные Variant сохраняются в виде исходного типа внутри Variant. Например, если вы записали Integer для Variant, то последующие операции обрабатывают Variant, как Integer.
Однако если арифметическая операция выполняется, как Variant, содержащий в себе Byte, Integer, Long, Single и результат превышает нормальный диапазон для исходного типа данных, то результат передвинется в пределах Variant к следующему более крупному типу данных. Byte передвинется до Integer, Integer передвинется до Long, Long и Single передвинутся до Double. Ошибка возникает, когда переменные Variant, содержащие значения Currency, Decimal и Double, превышают соответствующие диапазоны.
Вы можете использовать тип данных Variant вместо других типов, как более гибкую альтернативу. Если содержимое переменной Variant является цифрами, они могут быть представлены в виде строки из цифр, либо их фактическим значением в зависимости от контекста.
Например:
Dim MyVar As Variant
MyVar = 98052
В предыдущем примере
MyVar
содержит числовое представление - фактическое значение
98052
Арифметические операторы работают в переменных Variant, которые содержат числовые значения или строковые данные, которые могут быть интерпретированы как числа.
Если вы используете оператор + для добавления к
MyVar
другой переменной типа Variant, содержащей число или переменную числового типа, то результатом будет арифметическая сумма.
Значение Empty обозначает переменную Variant, которая не была инициализирована (назначено начальное значение). Variant, содержащий значение Empty, равен 0, если он используется в числовом контексте, либо это строка нулевой длины (“”), если он используется в контексте строки.
Не путайте Empty с Null. Null означает, что переменная Variant намеренно не содержит достоверных данных.
В типе Variant значение Error является специальным значением, используемым для индикации ошибки, произошедшей в процедуре. Однако, в отличие от других ошибок, обычная обработка ошибок на уровне приложений не возникает. Это позволяет вам или самому приложению принять какое-то альтернативное действие, основанное на значении ошибки. Значения ошибок создаются путём преобразования реальных чисел в значения ошибок с использованием функции CVErr.