数据类型摘要 (Visual Basic)

下表显示了 Visual Basic 的数据类型及其支持的公共语言运行时类型、名义存储分配和取值范围。

Visual Basic 类型

公共语言运行时类型结构

名义存储分配

取值范围

Boolean

Boolean

取决于实现平台

True 或 False

Byte

Byte

1 个字节

0 到 255(无符号)

Char(单个字符)

Char

2 个字节

0 到 65535(无符号)

日期

DateTime

8 个字节

0001 年 1 月 1 日午夜 0:00:00 到 9999 年 12 月 31 日晚上 11:59:59

Decimal

Decimal

16 个字节

0 到 +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) †,不包含小数点;0 到 +/-7.9228162514264337593543950335,包含小数点右边 28 位

最小非零数为 +/-0.0000000000000000000000000001 (+/-1E-28) †

Double(双精度浮点型)

Double

8 个字节

对于负值,为 -1.79769313486231570E+308 到 -4.94065645841246544E-324 †

对于正值,为 4.94065645841246544E-324 到 1.79769313486231570E+308 †

Integer

Int32

4 个字节

-2,147,483,648 到 2,147,483,647(有符号)

Long (长整型)

Int64

8 个字节

(有符号)-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 (9.2...E+18 †)

对象

Object(类)

4 个字节(32 位平台上)

8 个字节(64 位平台上)

任何类型都可以存储在 Object 类型的变量中

SByte

SByte

1 个字节

-128 到 127(有符号)

Short(短整型)

Int16

2 个字节

-32,768 到 32,767(有符号)

Single (单精度浮点型)

Single

4 个字节

对于负值,为 -3.4028235E+38 到 -1.401298E-45 †

对于正值,为 1.401298E-45 到 3.4028235E+38 †

String (变长)

String(类)

取决于实现平台

0 到大约 20 亿个 Unicode 字符

UInteger

UInt32

4 个字节

0 到 4,294,967,295(无符号)

ULong

UInt64

8 个字节

0 到 18,446,744,073,709,551,615 (1.8...E+19 †)(无符号)

用户定义的(结构)

(继承自 ValueType

取决于实现平台

结构中的每个成员都有由自身数据类型决定的取值范围,与其他成员的取值范围无关

UShort

UInt16

2 个字节

0 到 65,535(无符号)

† 在科学记数法中,“E”表示以 10 为底的幂。 因此 3.56E+2 表示 3.56 x 102 或 356,3.56E-2 表示 3.56 / 102 或 0.0356。

备注

对于包含文本的字符串,请使用 StrConv 函数从一种文本格式转换为另一种格式。

使用类型字符,除了声明语句中指定数据类型外,可以强制某些编程元素的数据类型。 请参见 类型字符 (Visual Basic)

内存消耗

在声明一个基本数据类型时,假定该数据类型的内存消耗等于其名义存储分配是不安全的。 这是因为下面的注意事项:

  • **存储分配。**公共语言运行时根据执行应用程序的平台的当前特性来分配存储。 如果内存几乎用完,它可能会将声明的元素尽可能紧密地打包到一起。 在其他情况下,它可能会将内存地址与实际硬件边界对齐以优化性能。

  • **平台宽度。**64 位平台上的存储分配与 32 位平台上的存储分配不同。

47zceaw7.collapse_all(zh-cn,VS.110).gif复合数据类型

这些注意事项也同样适用于复合数据类型的每个成员,如结构或数组。 不能简单地将类型的各成员的名义存储分配相加。 此外,还有其他一些事项需要注意,如下所示:

  • **开销。**某些复合类型需要更多内存。 例如,数组需要为其本身和每个维使用额外的内存。 在 32 位平台上,这种开销目前为 12 个字节,外加每维 8 个字节。 在 64 位平台上,此需求增加了一倍。

  • **存储布局。**不能完全假定成员在内存中的存储顺序与声明的顺序相同。 甚至不能假定字节对齐方式,例如 2 字节或 4 字节边界。 如果要定义类或结构,并需要控制其成员的存储布局,则可以将 StructLayoutAttribute 特性应用于该类或结构。

47zceaw7.collapse_all(zh-cn,VS.110).gifObject 开销

引用任何基本或复合数据类型的 Object 在除了该数据类型中包含的数据之外还要额外使用 4 个字节。

请参见

参考

类型转换函数 (Visual Basic)

转换摘要 (Visual Basic)

StrConv

StructLayoutAttribute

概念

类型字符 (Visual Basic)

有效使用数据类型 (Visual Basic)