VB.NET语言里的整形数据类型包括:SByte、Byte、Short、UShort、Integer、UInteger、Long、ULong。SByte和Byte为字节整数,Short和UShort为双字节整数,Integer和UInteger为四字节整数,Long和ULong为八字节整数(它们的具体数值范围见《VB.NET的数据类型》)。其中最有效率的存储单位为Integer整型。
以U开头的类型为无符号类型整数(即取正值+),而其他大写字母开头的类型(除了Byte外)为有符号(即可以取+值也可以取-值 )类型。有符号整数的正值最大值和负值最小值的绝对值为其U开头对应类型的一半(如果U类型结尾数为奇数,则负值绝对值比正值多一个)。注意 Sbyte、Ushort、Uinteger、ULong 数据类型是与CLS规范不兼容的。无符号整型是不能代表负值的,如果对计算结果为无符号整型的表达式使用负号运算符(-),则VB会先将表达式转换为更高一级的有符号整数。
在VB代码中,如果我们使用的一个变量总是储存整数而不是小数,最好把它声明为有符号整型;如果一个变量里包含有二进制数据或未知数据,我们最好把它声明为无符号整型。无符号整型和有符号整型是具有同等效率的。
可以将二进制值、八进制值、十六进制的值赋值给整形类型变量。这些进制值在VB里的写法分别为 &B,&O,&H(字母也可用小写)后面加数位,与后面数位之间可以加 _ 。后面的数位为了提高可读性,可以在数位间添加 _ ,如 201,&B1100_1001,&O311,&H_6A。
如果尝试将整型变量设置为一个超出其类型范围之外的数值,则将出错。如果你尝试将其设置为小数,则数值将向上或向下舍入为最接近的整数值。如果该数值同等接近两个整数值,则值将舍入为最接近的偶数整数。这种做法可将因单方向持续舍入中点值而导致的舍入误差降到最低。
(1)Byte和SByte
Byte类型除了用来存储整数值,也常用来存储二进制数据。当VB读写文件或者调用类库时,它会自动转换数据格式。在这些转换期间,存放在Byte类型变量或数组里的数据被一直保留为二进制数据。如果你与不是为.NET写的组件对接的话,比如自动化或COM对象,请在Visual Basic代码里声明它为Byte类型而不是Char类型,因为字符类型在其他环境里都有不同的数据宽度(8位)。
(2)Short和UShort
这两种整型为双字节整型。对于数值计算,为了优化运行效率,对于适合Short和UShort范围的整数我们一般都是使用Integer类来代替。
在某些情况下,公共语言运行时可能将你的SByte和Short变量紧密压缩在一起以节省内存消耗。
(2)UInteger和Integer
算数运算用整型数值比用其他类型要快。整型数值中用Ineger和UInteger运算速度最快,VB编译器被优化适用于32位的整型数值。但如果操作大批小型数值,还是用Short和SByte划算些,尽管速度上比用Integer慢些。其实节省的空间与花费的时间和性能相比,是不值得的,除非遇到的是很大数组的值。如果需要更大的整数值可以使用Long或Decimal,但运算速度会慢得多。
四字节的Integer是所有整型数据里最有效率的,但注意Integer在其他环境中具有2个字节的不同数据宽度。如果将一个外部16位参数变量传递给VB.NET代码,请在VB代码中将其声明为Short而不是Integer。同样,其他环境里的Long是32位的,相当于VB.NET里的Integer。
(3)Long和ULong
在代码中,如果整数文本没有后缀,则会推理为Integer类型。如果整数文本超出了Integer类型的范围,除非有D类型字符(表示Decimal类型),否则编译器会将此数值解释为Long整型,如:
Dim b1 As Decimal = 9223372036854775807 ' 值在Long的范围内,不报错
Dim b2 As Decimal = 9223372036854775808 ' 编译器将生成错误
Dim b3 As Decimal = 9223372036854775808D ' 无错误
(4)BigInteger
表示任意大小的有符号整型数值可以使用BigInteger类型。在使用结构类型BigInteger前需要引入System.Numerics.dll。可以为该类型的变量赋值任何大小的正负整数。由小数去掉小数部分转为该类型可以使用以下两种方法:
Dim a As New BigInteger(任何小数值)
Dim a As New BigInteger = CType(任何小数值,BigInteger)
其数学操作方法有Add,Substract,Multiply,Divide,Pow,Log,Log10,Abs等。
(更多语法基础知识见本人的视频课程《VB .NET 编程语法知识 ( Visual Basic 2022 )》)