ZetCode

FreeBasic LongInt 关键字

最后修改于 2025 年 6 月 21 日

FreeBasic 的 LongInt 关键字表示一个 64 位有符号整数数据类型。它可以存储比标准 Integer 类型大得多的数字。对于需要大数值范围的计算,LongInt 至关重要。

基本定义

在 FreeBasic 中,LongInt 是一个 64 位有符号整数数据类型。它占用 8 字节内存,可以存储的值范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807。

当标准的 32 位整数不足时,就会使用 LongInt 变量。它们为数学运算和大型计数器提供了更大的范围。

声明 LongInt 变量

本示例展示了如何声明和初始化 LongInt 变量。

longint_declare.bas
Dim population As LongInt
Dim distance As LongInt = 149597870700  ' Earth-Sun distance in meters
Dim bigNumber As LongInt = 9223372036854775807

Print "population: "; population
Print "distance: "; distance
Print "bigNumber: "; bigNumber

在这里,我们声明了三个 LongInt 变量。第一个是未初始化的,默认值为 0。其他两个被设置为超出标准 Integer 范围的大值。LongInt 可以处理这些大数字而不会溢出。

LongInt 算术运算

LongInt 支持对大数进行所有标准的算术运算。

longint_arithmetic.bas
Dim a As LongInt = 5000000000
Dim b As LongInt = 3000000000

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

本示例演示了对 LongInt 值进行算术运算。所使用的数字对于标准的 Integer 类型来说太大了。LongInt 可以正确地处理这些运算,而不会出现溢出错误。

循环中的 LongInt

LongInt 可用作循环计数器,用于非常大的迭代。

longint_loop.bas
Dim i As LongInt
Dim limit As LongInt = 5000000000

For i = 1 To limit Step 1000000000
    Print "Iteration: "; i
Next

在这里,我们将 LongInt 变量用作循环计数器。循环运行多达 50 亿次迭代,这对于标准的 Integer 会导致溢出。步长值也很大,以展示 LongInt 的容量。

函数中的 LongInt

函数可以接受和返回 LongInt 值,用于大数处理。

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

Dim num As LongInt = 20
Print num; "! = "; Factorial(num)

Factorial 函数使用 LongInt 计算阶乘。阶乘增长非常快,会超出标准的 Integer 限制。LongInt 可以在溢出前处理更大的阶乘值。

LongInt 数组

LongInt 数组可以存储大型数据集的大数。

longint_array.bas
Dim bigNumbers(5) As LongInt
bigNumbers(0) = 10000000000
bigNumbers(1) = 20000000000
bigNumbers(2) = 30000000000
bigNumbers(3) = 40000000000
bigNumbers(4) = 50000000000

For i As Integer = 0 To 4
    Print "Element "; i; ": "; bigNumbers(i)
Next

本示例创建了一个 LongInt 值数组。每个元素存储一个对于标准 Integer 类型来说过大的数字。该数组可以像 FreeBasic 中的任何其他数字数组一样进行处理。

LongInt 类型转换

LongInt 可以通过适当的强制转换转换为其他数字类型。

longint_conversion.bas
Dim bigVal As LongInt = 2147483648  ' Exceeds Integer range
Dim intVal As Integer = CInt(bigVal)
Dim dblVal As Double = CDbl(bigVal)

Print "Original LongInt: "; bigVal
Print "Converted to Integer: "; intVal
Print "Converted to Double: "; dblVal

本示例演示了将 LongInt 转换为较小类型。如果值过大,转换为 Integer 可能会导致溢出。Double 可以存储完整的精度,但对于非常大的值会丢失整数精度。

带位运算的 LongInt

LongInt 支持对 64 位值进行位运算。

longint_bitwise.bas
Dim mask As LongInt = &HFFFF0000FFFF0000
Dim value As LongInt = &H123456789ABCDEF0

Print "Original: "; Hex(value)
Print "AND: "; Hex(value And mask)
Print "OR: "; Hex(value Or mask)
Print "XOR: "; Hex(value Xor mask)
Print "NOT: "; Hex(Not value)

本示例展示了对 LongInt 值进行的位运算。十六进制常量演示了 64 位模式。位运算作用于 LongInt 值的全部 64 位。

最佳实践

本教程介绍了 FreeBasic 的 LongInt 关键字,并通过实际示例展示了其在需要大整数的各种场景中的用法。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有超过十年的经验。

列出所有 FreeBasic 教程