数据类型摘要 (Visual Basic)

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

Visual Basic 类型 公共语言运行时类型结构 名义存储分配 值范围
布尔值 Boolean 取决于实现平台 TrueFalse
字节 Byte 1 字节 0 到 255 (未签名)
Char (单个字符) Char 2 个字节 0 到 65535 (未签名)
日期 DateTime 8 个字节 0:00:00(午夜) 1 月 1 日中午 11:59:59 下午 9999
十进制 Decimal 16 字节 0 到 +/-79,228,162,514,264,337,593,543,950,335 (+/-7.9...E+28) 没有小数点;0 到 +/-7.9228162514264337593543950335,小数右侧有 28 个位置:

最小非零数为 +/-0.00000000000000000000000000000001 (+/-1E-28)
精度浮点( 双精度浮点) Double 8 个字节 -1.79769313486231570E+308 到 -4.94065645841246544E-324 负值;

正值的 4.94065645841246544E-324 到 1.79769313486231570E+308
整数 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 (类) 32 位平台上的 4 个字节

64 位平台上的 8 个字节
任何类型都可以存储在类型的变量中 Object
SByte SByte 1 字节 -128 至 127 (已签名)
(短整数) Int16 2 个字节 -32,768 至 32,767 (已签名)
精度浮点) Single 4 个字节 -3.4028235E+38 到 -1.401298E-45 负值;

正值的 1.401298E-45 到 3.4028235E+38
字符串 (可变长度) 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 函数从一种文本格式转换为另一种文本格式。

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

内存消耗

声明基本数据类型时,假定其内存消耗与其名义存储分配相同是不安全的。 这是由于以下注意事项造成的:

  • 存储分配。 公共语言运行时可以根据应用程序正在执行的平台的当前特征分配存储。 如果内存几乎已满,它可能会将声明的元素尽可能紧密地打包在一起。 在其他情况下,它可能会将其内存地址与自然硬件边界保持一致,以优化性能。

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

复合数据类型

相同的注意事项适用于复合数据类型的每个成员,例如结构或数组。 你不能仅仅依赖将类型成员的名义存储分配加在一起。 此外,还有其他注意事项,例如:

  • 开销。 某些复合类型具有额外的内存要求。 例如,数组对数组本身和每个维度使用额外的内存。 在 32 位平台上,此开销目前是每个维度的 12 字节和 8 个字节。 在 64 位平台上,此要求会翻倍。

  • 存储布局。 无法安全地假定内存中的存储顺序与声明顺序相同。 你甚至不能对字节对齐做出假设,例如 2 字节或 4 字节边界。 如果要定义类或结构,并且需要控制其成员的存储布局,则可以将 StructLayoutAttribute 属性应用于类或结构。

对象开销

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

另请参阅