Data Types

The care of numbers constitutes an important part of every programming system.  Fortunately, PowerBASIC allows you to ignore most technical considerations about internal number handling.  If you never give a thought to such matters as calculation speed, precision, and memory requirements, your programs will usually continue to work as you expect.  However, an understanding of the underlying issues will help when you need to write programs that are faster, more accurate, and require less memory.

For efficiency, PowerBASIC stores and processes data in different forms.  It supports eleven unique numeric types, three string types, and also pointers.  The following tables summarize the most important features and distinctions of these data types.  The rest of this section explains these features in detail.

Numeric Data storage requirements and ranges

Data Type

Size

Decimal Range

Binary Range

Integer

16 bits (2 bytes), signed

-32,768 to 32,767

-2^15 to 2^15-1

Long-integer

32 bits (4 bytes), signed

-2,147,483,648 to 2,147,483,647

-2^31 to 2^31-1

Quad-integer

64 bits (8 bytes), signed

-9.22*10^18 to +9.22*10^18

-2^63 to 2^63-1

Byte

8 bits (1 byte), unsigned

0 to 255

0 to 2^8 -1

Word

16 bits (2 bytes), unsigned

0 to 65,535

0 to 2^16 -1

Double-word

32 bits (4 bytes), unsigned

0 to 4,294,967,295

0 to 2^32 -1

Single-precision

32 bits (4 bytes)

8.43*10^-37 to 3.40*10^38

 

Double-precision

64 bits (8 bytes)

4.19*10^-307 to 1.79*10^308

 

Extended-precision

80 bits (10 bytes)

3.4*10^-4932 to 1.2*10^4932

 

Currency

64 bits (8 bytes)

-9.22*10^14 to +9.22*10^14

 

Extended-currency

64 bits (8 bytes)

-9.22*10^16 to +9.22*10^16

 

Variant

128 bits (16 bytes)

{data-dependent}

{data-dependent}

 Variable type-specifiers and keywords

Variable type

Type specifier

Element size

DEF type

Type keyword

Pointer

N/A

4

N/A

PTR/POINTER

Integer

%

2

DEFINT

INTEGER

Long-integer

&

4

DEFLNG

LONG

Quad-integer

&&

8

DEFQUD

QUAD

Byte

?

1

DEFBYT

BYTE

Word

??

2

DEFWRD

WORD

Double-word

???

4

DEFDWD

DWORD

Single-Float

!

4

DEFSNG

SINGLE

Double-Float

#

8

DEFDBL

DOUBLE

Extended-Float

##

10

DEFEXT

EXT/EXTENDED

Currency

@

8

DEFCUR

CUR/CURRENCY

Extended-currency

@@

8

DEFCUX

CUX/CURRENCYX

String

$

4

DEFSTR

STRING

Fixed-length string

N/A

N/A

N/A

STRING * x

Null-terminated String

N/A

N/A

N/A

ASCIIZ, STRINGZ

FIELD string

$

16

N/A

FIELD

Wide String

$$

4

N/A

WSTRING

Wide Fixed length String

N/A

N/A

N/A

WSTRING * x

Wide Nul-Terminated String

N/A

N/A

N/A

WSTRINGZ

Wide Field String

N/A

16

N/A

WFIELD

Variant

N/A

16

N/A

VARIANT

GUID

N/A

16

N/A

GUID

IAUTOMATION

N/A

4

N/A

IAUTOMATION

IDISPATCH

N/A

4

N/A

IDISPATCH

IUNKNOWN

N/A

4

N/A

IUNKNOWN