例如:
八进制:
在FreeBASIC中,八进制数据以“&O”开头(注意是字母O而不是数字0),后跟八进制数字(0 1 2 3 4 5 6 7)
例如:
十进制:
十进制数没有什么前缀符号,用数字(0 1 2 3 4 5 6 7 8 9)表示,也可以在数字前加“-”表示负数。
例如:
十六进制:
在FreeBASIC中,十六进制数以“&H”开头,后跟十六进制数字(0 1 2 3 4 5 6 7 8 9 AB C D E F)。
例如:2、类型名称和范围
整数类型数据根据实际存储大小分成不同类型,有符号数据类型可以表示负数,无符号数据类型则只表示0以上的数据,无符号类型是在有符号类型前加字母U(即Unsigned)。
由于数值是以补码表示的,正数的补码和源码相同;负数的补码是将该数的绝对值的二进制形式按位取反再加1,所以负数左边的第一位是表示符号的,其数值范围因为有了符号位即可以表示负数和正数了。各种无符号类型量所占的内存空间字节数与相应的有符号类型量相同。但由于省去了符号位,故不能表示负数。
其中Integer和UInteger类型取决于系统的大小,在32位系统中则其位数为32位,在64位系统中则其位数为64位。整数类型的具体名称和范围如表2-1所示。
类型名称 | 位数 | 最小值 | 最大值 | 说明 |
Byte | 8 | -128 | 127 | 有符号整数,1字节 |
UByte | 8 | 0 | 255 | 无符号整数,1字节 |
Short | 16 | -32768 | +32767 | 有符号整数,2字节 |
UShort | 16 | 0 | 65535 | 无符号整数,2字节 |
Long | 32 | -2147483648 | +2147483647 | 有符号整数,4字节 |
Ulong | 32 | 0 | 4294967295 | 无符号整数,4字节 |
Integer | 32/64 | 取决于系统 | 取决于系统 | 有符号整数,取决于系统 |
UInteger | 32/64 | 取决于系统 | 取决于系统 | 无符号整数,取决于系统 |
LongInt | 64 | -9223372036854775808 | +9223372036854775807 | 有符号整数,8字节 |
ULongInt | 64 | 0 | +18446744073709551615 | 无符号整数,8字节 |
2.3.2 浮点数型
浮点类型Single和Double的最小值为最接近零的值,最大值为最接近正负无穷大的值。浮点类型具体名称和范围如表2-2所示。类型名称 | 位数 | 最小值 | 最大值 | 说明 |
Single | 32 | +/-1.401298E-45 | +/-3.402823E+38 | 浮点数,4字节 |
Double | 64 | +/-4.940656458412465E-324 | +/-1.797693134862316E+308 | 浮点数,8字节 |
例如:
ZString是一个C风格的固定大小的字符数组。也就是在定义字符变量时必须声明字符串的长度,或者声明字符串指针(关于指针内容在指针章节说明)。字符串的末尾用空字符(ASCII值0)标记。这是由FreeBASIC字符串处理函数自动添加的。当字符串创建时,将附加一个空字符,并且将通过扫描第一个空字符的字符串来计算长度。空字符永远不会包含在ZString的文本中,否则字符串的其余部分将被截断。在ZString中,Len返回包含字符串的大小,SizeOf返回赋值给ZString的空间。ZString的初始符号是用“=>”表示的,这个区别于String类型。
语法:
例如:
WString是固定大小的宽字符数组(Unicode或者Wide类型字符),如果在编译时已知大小,则该字符串将永远不会溢出。定义字符变量时必须声明字符串的长度,或者声明字符串指针(关于指针内容在指针章节说明)。WString与ZString类似的在字符串的末尾用空字符(ASCII值0)标记。在WString文本中不能有空字符,否则字符串的其余部分将被截断。在WString中,Len返回包含字符串的大小,SizeOf返回赋值给WString的空间。由于WString是宽字符的,所以Len返回的是字符串个数(汉字被算做一个字符,而不是ZString或String中的2个字节)。WString的初始符号也是用“=>”表示的。
语法:
例如:
表2-3 字符类型名称和范围
类型名称 | 字符大小 | 最小尺寸(字符数) | 最大尺寸(字符数) | 说明 |
String | 1字节 | 0 | +2147483647 | |
ZString | 1字节 | 0 | +2147483647 | |
WString | 系统决定 | 0 | +2147483647 |
2.3.4 其他类型及类型修饰符
1、Const
Const除了可以定义常量外,还可以作为变量的修饰符,指定数据类型或指针数据类型是只读的。语法如下:
指定Const限定符的datatype或Ptr将被视为只读。只读(Const)声明是可以被视为“不改变”的类型。编译器使用Const声明来检查对变量和参数的操作,并且如果数据可能会发生变化,则在编译时生成错误。由于所有的检查都是在编译时进行的,所以使用Const限定符没有运行时的开销。
Const可以在数据类型声明的任何地方使用。这包括变量,参数,函数返回结果,用户定义的类型字段,类型别名和转换。datatype 可以是任何内置的标准数据类型或用户自定义的类型。
非Const和Const变量都可以传递给一个期望一个Const参数的过程。但是,一个Const变量不能被传递给一个采用非Const参数的过程,并且会产生一个编译错误。程序可以根据参数的常量重载。使用指针声明,Const可用于指示指针声明的哪一部分是只读的(所有其他部分都是默认读写)。指针数据类型的只读部分可以是指针本身(地址),指针指向什么(数据)或两者都是。在具有多个级别Ptr间接的声明中,最右边的Ptr表示间接的最高级别,因此首先被取消引用。
编译器具有相对于Const限定符的八个指针间接级别的内部硬限制,并且使用Ptr具有大于八个间接级别的数据类型的Const的行为是未定义的。
例如:
2、Unsigned
在定义有符号的整型数据时可以用Unsigned修饰符将数据强制声明为无符号类型,由于FreeBASIC已经有无符号的数据类型,所以很少使用该修饰符。DataType必须是有符号的整数类型。
语法:
例如:
3、Any
Any在FreeBASIC中经常见到,但其本身并不是变量的有效数据类型,Any是以各种方式用作于类型或值的占位符,Any可以用于指针、ByRef参数以及动态数组的声明和数据的初始化中。
在指针中Any Ptr(或“Any Pointer”)作为特殊指针类型允许指向任何变量类型。如果您将其转换为DataTypePtr,则可以索引或取消引用以访问内存,作为DataType 的实例。指针算术允许在Any Ptr上,并像Byte Ptr一样对待:指针以1的增量更改。
纯粹的Any Ptr没有编译器的类型检查。它可以通过赋值或参数传递隐式转换为其他指针类型。这里不要与可以包含任何类型的变量的Visual Basic数据类型Variant相混淆。FreeBASIC不提供Variant类型的本地支持。
Any可以在具有ByRef参数的过程原型(Declare语句中)中使用,以禁用编译器检查传递的变量的正确类型。在FreeBASIC中函数和过程中,Any的使用已被弃用,仅与QB兼容。
在数组声明中,可以指定Any代替数组边界,以创建一个基于指定的Any数量确定的一定维度的动态数组,在Type内声明一个动态数组成员时必须使用Any参数。
Any可以用作伪初始化值,以将变量的默认初始化禁用为0,使变量未初始化。这可以节省程序的部分的时间。程序必须在读取变量之前填写有意义的数据。与C/C++的比较:这与C/C++中没有初始化值的变量声明的行为相匹配。
Any也可以与New或Placement New运算符一起使用,以便将新创建的对象未初始化(仅允许使用不具有构造函数的数据类型)。同时FreeBASIC的内部函数Instr和InstrRev的参数也使用Any类型。使用类型如下: