数据类型摘要 (Visual Basic)
下表显示了 Visual Basic 数据类型、其支持的公共语言运行时类型、其名义存储分配及其值范围。
Visual Basic 类型 | 公共语言运行时类型结构 | 名义存储分配 | 取值范围 |
---|---|---|---|
布尔值 | 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 | 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 † |
整数 | 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 | Object(类) | 32 位平台上的 4 个字节 64 位平台上的 8 个字节 |
在 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 †)(未签名) |
User-Defined(结构) | (继承自 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 个字节。