PowerBASIC for Windows (PB/WIN 7.00)
Типы данных

Числа

Для большей эффективности, PowerBASIC хранит и обрабатывает данные в различных форматах. Он поддерживает 11 уникальных числовых типов, 3 строковых типа, а также указатели. Следующая таблица объединяет важнейшие особенности и различия этих типов данных.

Характеристики числовых типов

Тип данных Размер Десятичный диапазон Бинарный диапазон
Целое 16 битов (2 байта), со знаком -32 768 — 32 767 -2^15 — 2^15-1
Длинное целое 32 бита (4 байта), со знаком -2 147 483 648 — 2 147 483 647 -2^31 — 2^31-1
Квадра-целое 64 бита (8 байт), со знаком -9.22x10^18 — 9.22x10^18 -2^63 — 2^63-1
Байт 8 битов (1 байт), без знака 0 — 255 0 — 2^8-1
Слово 16 битов (2 байта), без знака 0 — 65 536 0 — 2^16-1
Двойное слово 32 бита (4 байта), без знака 0 — 4 294 967 295 0 — 2^32-1
Простой точности 32 бита (4 байта) 8.43x10^-37 — 3.37x10^38  
Двойной точности 64 бита (8 байтов) 4.19x10^-307 — 1.67x10^308  
Расширенной точности 80 битов (10 байтов) 3.4x10^-4932 — 1.2x10^4932  
Денежный 64 бита (8 байтов) -9.22x10^14 — 9.22x10^14  
Расширенный денежный 64 бита (8 байтов) -9.22x10^16 — 9.22x10^16  
Произвольный 128 битов (16 байтов) (зависит от данных) (зависит от данных)

Спецификаторы типов переменных и ключевые слова

Тип переменной Спецификатор типа Размер элемента DEF-тип Ключевое слово
Указатели
Указатель   4   PTR, POINTER
Целые
Целое % 2 DEFINT INTEGER
Длинное целое & 4 DEFLNG LONG
Квадра-целое && 8 DEFQUD QUAD
Беззнаковые целые
Байт ? 1 DEFBYT BYTE
Слово ?? 2 DEFWRD WORD
Двойное слово ??? 4 DEFDWD DWORD
С плавающей точкой
Простой точности ! 4 DEFSGN SINGLE
Двойной точности # 8 DEFDBL DOUBLE
Расширенной точности ## 10 DEFEXT EXT
Денежные
Денежный @ 8 DEFCUR CUR, CURRENCY
Расширенный денежный @@ 8 DEFCUX CUX, CURRENCYX
Строки
Строка $ 4 DEFSTR STRING
Строка фикс. длины       STRING * x
ASCIIZ-строка       ASCIIZ, ASCIZ
COM-переменные
Произвольный   16   VARIANT
GUID   16   GUID

Константы и литералы

Программы на PowerBASIC'е поддерживают два различных класса данных: переменные и константы. Переменная может изменять свое значение во время работы программы. Значение же константы фиксируется во время компиляции и не может изменяться во время выполнения программы (следовательно, оно остается постоянным). PowerBASIC поддерживает четыре типа констант: строковые литералы, числовые литералы, строковые приравнивания и числовые приравнивания.

Строковые литералы

Строковой литерал — это, проще говоря, группа символов, заключенная в двойные кавычки. Например:

"Это - строка"
"3.14159"
"John Jones, Attorney at Law"

Строковой литерал может включать символ "двойные кавычки" при его удвоении в строке. Например:

A$ = "Это - ""строка"""

Числовые литералы

Числовые литералы представляют числовые значения. Они состоят главным образом из цифр от 0 до 9 и десятичной точки. Отрицательные значения предваряются знаком "минус" (-); знак "плюс" (+) для положительных значений необязателен. Степень назначаемой вами точности определяется внутренним представлением (целое, длинное целое, квадра-целое, байт, слово, двойное слово, простой точности, двойной точности, расширенной точности и денежное), которое PowerBASIC будет использовать при обработке значения литерала.

Вы также можете принудительно сохранять значение литерала с заданной точностью, поставив после константы один из спецификаторов типа переменной (%, &, &&, ?, ??, ???, !, #, ##, @, @@). Эта возможность бывает очень полезна при работе с значениями типа "денежное" и другими числами с плавающей точкой.

Например, оператор eVar##=1.1 помещает представление с простой точностью числа 1.1 (которое равно 1.10000002384185791) в переменную расширенной точности eVar##. Чтобы сохранить точное значение 1.1 в eVar##, вы должны вслед за числом 1.1 поставить спецификатор типа расширенной точности (##). Например:

DIM x1 AS EXT, x2 AS EXT
x1 = 1.1            ' Литерал простой точности
x2 = 1.1##          ' Литерал расширенной точности
a$ = STR$(x1,18)    ' 1.10000002384185794
b$ = STR$(x1)       ' 1.10000002384186
c$ = STR$(x2,18)    ' 1.1
d$ = STR$(x2)       ' 1.1

Если за числовой константой не следует спецификатор типа, то используются следующие правила по определению точности, в которой будет сохранено значение:

  1. Если значение не содержит десятичной точки и находится в пределах от 0 до 255, то PowerBASIC сохраняет значение как байт.

  2. Если значение — целое в пределах от -32 768 до 32 767 и лежит вне пределов значений для байтовых констант, то PowerBASIC сохраняет значение как целое.

  3. Если значение — целое в пределах от 32 768 до 65 535, то PowerBASIC будет сохранять значение как слово.

  4. Если значение — целое в пределах от -2^31 до 2^31-1 включительно (примерно от -2 миллиардов до +2 миллиардов) и лежит вне пределов для констант типа слово, то PowerBASIC сохраняет значение как длинное целое. Остальные большие целые значения сохраняются как квадра-целые.

  5. Наконец, если целое значение положительно, превышает максимальное значение для длинного целого и все еще находится в пределах диапазона двойного слова, то PowerBASIC будет сохранять значение как двойное слово.

  6. Если значение содержит десятичную точку и имеет до шести цифр, то PowerBASIC сохраняет его как простой точности с плавающей точкой.

  7. Числовая константа с десятичной точкой и более чем с шестью цифрами, но менее чем 17, или если все число слишком велико, чтобы быть квадра-целым, но достаточно небольшое, чтобы находиться в пределах числа двойной точности с плавающей точкой, сохраняется в формате двойной точности с плавающей точкой. Большие значения (вплоть до 18 значащих цифр) сохраняются в формате расширенной точности.

Например:

345.1              ' Константа простой точности
1.10321            ' Константа простой точности
1.103213           ' Константа двойной точности
3453212.1234       ' Константа двойной точности
1112223.4445556667 ' Константа расширенной точности

Когда знак целой константы неочевиден (нет спецификатора типа), PowerBASIC использует следующие правила для определения, сохранять значение знаковым или беззаковым:

  1. Если число включает спецификатор типа, то значение будет знаковым или беззаковым в соответствии с типом (по определению: байт, слово и двойное слово — беззнаковые; целое, длинное целое, квадра-целое — знаковые).

  2. Если спецификатора типа нет, а число 16-битного размера выражено точно 4 шестнадцатиричными цифрами (или число 32-битного размера выражено точно 8 шестнадцатиричными цифрами), а также  самый старший бит установлен (1), то число считается знаковым. Все остальные шестнадцатиричные константы расцениваются как беззнаковые. Эти же правила применяются к 16- и 32-битным бинарным и восьмеричным литералам.

    Такие шестнадцатиричные значения со знаком могут принудительно расцениваться как беззнаковые добавлением дополнительного ведущего нуля или добавлением суффикса спецификатора типа. Это поведение разработано для совместимости с другими диалектами BASIC.

Вот несколько примеров к этим правилам:

32767??       ' Слово         (беззаковое)
-40000        ' Двойное слово (знаковое)
32            ' Байт          (беззнаковое)
-32           ' Целое         (знаковое)
&H08000       ' Слово         (беззнаковое)
&H8000        ' Целое         (знаковое)
&H8000&       ' Целое         (знаковое)
&H08000&      ' Целое         (знаковое)
&H80000000    ' Длинное целое (знаковое)
&H80000000&&  ' Длинное целое (знаковое)
&H080000000   ' Двойное слово (беззнаковое)
&H80000000??? ' Двойное слово (беззнаковое)

Эта последовательность событий позволяет PowerBASIC делать интеллектуальное решение о константах в вашей программе. Вместо того, чтобы произвольно делать все неоднозначные константы знаковыми (или беззнаковыми), он пробует определить, какой тип константы вы намеревались использовать. Вы не обязательно должны принимать решение о размере целой константы, а только должно ли оно быть знаковым или беззнаковым. Все, что вы должны сделать, чтобы гарантировать, что константа будет рассматриваться как значение без знака — это должны разместить ведущий ноль в числе. Вы не должны рассматривать, является ли число байтом, словом, или двойным словом (пока вы не превышаете наибольшее значение двойного слова).

Целые константы в других числовых системах

Иногда удобнее выражать целые числа в числовых системах (основаниях), отличных от десятичной (где основание 10). Это особенно верно, когда выражаемая информация бинарна по сути, например, машинные адреса. PowerBASIC разрешает вам представлять данные в шестнадцатиричной (основание 16), восьмеричной (основание 8) и бинарной (основание 2) нотациях.

Шестнадцатиричные константы содержат до 16 символов, где каждый символ — шестнадцатиричная цифра от 0 до F, и должна предваряться &H. Дополнительный (ведущий) нуль может быть добавлен для принудительного распознавания числа беззнаковым (либо добавлением подходящего спецификатора типа). Следующие варианты эквивалентны для определения беззнакового шестнадцатиричного значения в пределах двойного слова:

A??? = &H0FFFFFFFF
A??? = &HFFFFFFFF???

Восьмеричные константы могут содержать только символы от 0 до 7, должны быть до 22 символов длиной и предваряться сочетаниями &O, &Q или просто &.

B = &Q7777

Бинарные константы содежат только нули и единицы, могут быть до 64 знаков длиной и должны предваряться &B.

Каждая из следующих констант представляет целое число 256 (десятичное):

256 ~ &H100 ~ &O400 ~ &Q400 ~ &400 ~ &B100000000

Как и десятичные константы, шестнадцатиричные, восьмеричные и бинарные константы могут иметь спецификатор типа. Вы можете использовать спецификаторы типа ?, ??, ???, %, &, && (байт, слово, двойное слово, целое, длинное целое, квадра-целое) с константами при любом числовом основании.

Если вы не хотите использовать спецификатор типа с этими константами, компилятор будет выбирать наименьший целый тип, который сможет содержать число.

Вы можете использовать функцию VAL для преобразования строк в числовые значения. Такие строки могут содержать десятичные, шестнадцатиричные, бинарные и восьмеричные числа в строковой формат. Смотрите описание функции VAL для большей информации.

Перевод официальной документации
"PowerBASIC for Windows (PB/WIN 7.0) On-line Help"
от PowerBASIC, Inc.


Отослать замечания по переводу

static-lab.yandex.ru

www.powerbasic.com