ZetCode

FreeBasic Long 关键字

最后修改于 2025 年 6 月 21 日

FreeBasic 的 Long 关键字表示一个 32 位有符号整数数据类型。它可以存储从 -2,147,483,648 到 2,147,483,647 的整数。当常规整数太小时,通常会使用长整数。

基本定义

在 FreeBasic 中,Long 是一种基本数据类型,占用 4 字节(32 位)内存。它比标准的 Integer 类型提供了更宽的范围,适用于更大的数值。

Long 类型是有符号的,这意味着它可以表示正数和负数。它对于可能超出较小整数类型范围的计算特别有用。

声明 Long 变量

此示例显示了如何声明和初始化 Long 变量。

long_declare.bas
Dim population As Long
Dim distance As Long = 150000000
Dim accountBalance As Long = -50000

Print "population: "; population
Print "distance: "; distance
Print "accountBalance: "; accountBalance

这里我们声明了三个 Long 变量。第一个未初始化,默认为 0。其他两个被设置为正值和负值。Long 变量可以存储比常规 Integer 变量大得多的数字。

Long 算术运算

Long 变量支持所有标准算术运算。

long_arithmetic.bas
Dim a As Long = 2000000000
Dim b As Long = 1000000000

Print "Addition: "; a + b
Print "Subtraction: "; a - b
Print "Multiplication: "; a * 2
Print "Division: "; a / 3
Print "Modulus: "; a Mod b

此示例演示了 Long 值的基本算术运算。请注意,运算可能会超出 Long 的范围,可能导致溢出。FreeBasic 不会自动防止 Long 变量的算术溢出。

循环计数器中的 Long

Long 变量可用作非常大范围的循环计数器。

long_loop.bas
Dim i As Long
For i = 2000000000 To 2000000005
    Print "Counter: "; i
Next

这里我们使用一个 Long 变量作为循环计数器。当循环范围超出常规 Integer 的最大值时,这很有用。该循环打印从 20 亿到 20 亿加 5 的数字。

带数组的 Long

可以使用 Long 变量为大型集合编制数组索引。

long_array.bas
Dim Shared bigArray(1000000) As Integer
Dim index As Long

For index = 0 To 1000000
    bigArray(index) = index Mod 100
Next

Print "Element 500000: "; bigArray(500000)

此示例展示了 Long 变量如何索引大型数组。当处理包含超过 32,767 个元素的数组时,需要 Long 索引。该数组包含一百万个元素。

Shared 关键字允许全局访问数组,这对于需要在程序不同部分共享的大型数据集非常有用。此外,默认情况下,FreeBasic 数组存储在堆栈上,但使用 Shared 关键字,数组存储在堆中,允许更大的内存分配。

Long 类型转换

FreeBasic 在 Long 和其他数字类型之间执行自动转换。

long_conversion.bas
Dim l As Long = 2147483647
Dim d As Double = l

Print "Long to Double: "; d

Dim newLong As Long = 3.14159
Print "Double to Long: "; newLong

这演示了隐式类型转换。转换为浮点数时,不会丢失精度。从浮点数转换为 Long 时,值会被截断(小数部分被丢弃)。

带位运算的 Long

Long 变量支持位运算,用于底层编程。

long_bitwise.bas
Dim flags As Long = &B11001100110011001100110011001100
Dim mask As Long = &B00000000111111110000000011111111

Print "Original: "; Bin(flags, 32)
Print "AND: "; Bin(flags And mask, 32)
Print "OR: "; Bin(flags Or mask, 32)
Print "XOR: "; Bin(flags Xor mask, 32)
Print "NOT: "; Bin(Not flags, 32)

此示例显示了 Long 值的位运算。Bin 函数显示二进制表示。位运算对于处理标志、掩码和二进制数据很有用。

位运算允许您操作 Long 值的单个位,这在底层编程中至关重要,例如硬件控制、网络协议和性能优化。它们可用于设置、清除或切换 Long 变量中的特定位。例如,您可以使用位运算创建表示程序中不同状态或选项的标志。

Long 函数参数

函数可以接受和返回 Long 值,用于大型数值运算。

long_function.bas
Function Factorial(n As Long) As Long
    Dim result As Long = 1
    Dim i As Long
    
    For i = 1 To n
        result = result * i
    Next
    
    Return result
End Function

Print "Factorial of 10: "; Factorial(10)
Print "Factorial of 15: "; Factorial(15)

此阶乘函数使用 Long 变量来处理更大的结果。虽然阶乘增长很快,但 Long 类型最多可以存储 12!(12! = 479001600)的阶乘而不会溢出。更大的值需要 ULong

最佳实践

本教程介绍了 FreeBasic 的 Long 关键字,并通过实际示例展示了其在不同场景下的用法。

作者

我的名字是 Jan Bodnar,我是一位热情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出所有 FreeBasic 教程