字面量
- 来源: https://www.freebasic.net/wiki/wikka.php?wakka=ProPgLiterals
- 最后更新: 2022-05-21
非变量的编译时字符串、数值和布尔值。
字面量是直接在源代码中指定的数字、字符串或布尔值。字面量可通过赋值给变量或常量、传递给过程,或在表达式中使用。
数值字面量有两种形式:整数和浮点数。
整数字面量
十进制
十进制数字(0 1 2 3 4 5 6 7 8 9)。
注意:要获得负值,可以在数值字面量前加上 "-" 符号(Operator - (Negate))
start GeSHi
Dim x As Integer = 123456
Dim b As Byte = -128end GeSHi
十六进制
"&H",后跟十六进制数字(0 1 2 3 4 5 6 7 8 9 A B C D E F)。
start GeSHi
Dim x As Integer = &h1E240
Dim b As Byte = &H80end GeSHi
八进制
"&O"(或 "&"),后跟八进制数字(0 1 2 3 4 5 6 7)
start GeSHi
Dim x As Integer = &O361100
Dim b As Byte = &O200end GeSHi
二进制
"&B",后跟二进制数字(0 1)
start GeSHi
Dim x As Integer = &B11110001001000000
Dim b As Byte = &B10000000end GeSHi
整数大小后缀
如果未指定整数字面量后缀,则会自动计算保存该字面量所需的字段大小。指定大小后缀可确保编译器将数字视为特定的整数大小。
以下结尾的整数字面量:
- "
%",被视为有符号 32/64(取决于平台)位整数。(Integer) - "
L"、"&",被视为有符号 32 位长整数。(Long) - "
U",被视为无符号 32/64(取决于平台)位整数。(Uinteger) - "
UL",被视为无符号 32 位整数。(Ulong) - "
LL",被视为有符号 64 位整数。(Longint) - "
ULL",被视为无符号 64 位整数。(Ulongint)
前缀数值字面量的负号(-)和正号(+)并不属于数值字面量的一部分。形如 "-1L" 的表达式会被解析为将取反运算符应用于正字面量("1L")所表示的值,这可能涉及隐式类型转换。当显式的 "+" 号出现在整数字面量之前时,行为相同。
前缀、后缀和十六进制字母数字均不区分大小写。
start GeSHi
Dim a As Long = 123L
Dim b As UInteger = &h1234u
Dim c As LongInt = 76543LL
Dim d As ULongInt = &b1010101ULLend GeSHi
浮点字面量
浮点数以十进制数字表示,可为正数或负数,包含小数部分,以及可选的指数部分。浮点字面量的格式如下(不含空格或括号):
number[.[fraction]][(D|E)[+|-][exponent]][suffix]
或
.fraction[(D|E)[+|-][exponent]][suffix]
默认情况下,没有指数或后缀的浮点数被视为双精度浮点值,但在 -lang qb 方言中,7 位或更少位数的数字被视为单精度。
start GeSHi
Dim a As Double = 123.456
Dim b As Double = -123.0end GeSHi
在数字/小数部分之后放置字母 "D" 或 "E",可以为数字指定指数。指数可以用加号("+")或减号("-")指定为正数或负数。没有符号的指数为正数。
字母后不需要指数值(甚至符号后也不需要),因此字母可以单独用于指定类型。"D" 指定双精度浮点数。"E" 指定使用默认精度的浮点数。当字母与后缀结合使用时(见下文),后缀所表示的类型优先于字母所指定的类型。
start GeSHi
Dim a As Double = -123.0d
Dim b As Double = -123e
Dim c As Double = 743.1e+13
Dim d As Double = 743.1D-13
Dim e As Double = 743.1E13
Dim f As Single = 743D!end GeSHi
数字上的 "!" 或 "F" 后缀指定单精度(共 32 位)浮点值。"#" 或 "D" 后缀指定双精度浮点数。
注意,字母后缀和指数说明符均不区分大小写。
start GeSHi
Dim a As Single = 3.1!
Dim b As Single = -123.456e-7f
Dim c As Double = 0#
Dim d As Double = 3.141592653589e3#end GeSHi
字符串字面量
字符串字面量是包含在两个双引号之间的字符序列。字符序列可以是转义或非转义的。
双引号可以通过在字符串字面量中连续使用两个双引号来指定。
start GeSHi
Print "Hello World!"
Print "That's right!"
Print "See the ""word"" contained in double quotes."end GeSHi
如果字符串字面量以 ! 运算符(转义字符串字面量)为前缀,则字符串字面量可以包含转义序列。接受的转义序列列表请参见转义序列。
start GeSHi
Print !"Hello\nWorld!"end GeSHi
默认情况下,字符串字面量是非转义的,除非在源码中使用了 Option Escape,此后所有字符串字面量默认均为转义的。
可以通过 $ 运算符(非转义字符串字面量)前缀将字符串显式指定为非转义。
start GeSHi
Print $"C:\temp"end GeSHi
除了带有 Unicode 转义序列(\u)的 ASCII 文件外,FreeBASIC 还可以解析 UTF-8、UTF-16LE、UTF-16BE、UTF-32LE 和 UTF-32BE 源文件(只要它们以字节顺序标记(BOM)保存),从而允许在字符串字面量中直接使用 Unicode 字符。
注意:最可靠的跨平台代码是通过使用不带 BOM 的 ASCII/UTF-8 字符编码获得的。
ASCII 文件中的字符串字面量被视为 ZString,而 Unicode 文件中的字符串字面量被视为 WString(无论字符串字面量的值如何)。
布尔字面量
布尔类型有两个值,分别由字面量 True 和 False 表示。
start GeSHi
Dim a As Boolean = False
Dim b As Boolean = Trueend GeSHi
另请参阅
Typeof#defineConst标准数据类型变量类型概述、限制和后缀表
返回 目录