C/C++中long int和long long int之间的区别

C/C++中long int和long long int之间的区别

C/C++中,long int和long long int是两种整型数据类型。它们的长度分别为4字节和8字节。但是除了长度以外,它们还有哪些不同呢?接下来我们来逐一比较它们的差别。

取值范围的差异

long int和long long int的取值范围是不同的。在C++11之前,long int的取值范围至少要为-2,147,483,648 ~ 2,147,483,647,即2^{31}-1,而long long int的取值范围至少要为-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807,即2^{63}-1。这意味着long long int的取值范围比long int大得多。

为了方便起见,我们可以使用标准库头文件中的常量来获取long int和long long int的取值范围。具体方法如下:

#include <climits>
#include <iostream>

int main() {
    std::cout << "long int范围:[" << LONG_MIN << ", " << LONG_MAX << "]\n";
    std::cout << "long long int范围:[" << LLONG_MIN << ", " << LLONG_MAX << "]\n";
    return 0;
}

输出:

long int范围:[-2147483648, 2147483647]
long long int范围:[-9223372036854775808, 9223372036854775807]

从输出结果可以看出,long int的范围在-2,147,483,648 ~ 2,147,483,647之间,long long int的范围在-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807之间。

内存占用的差异

long int和long long int在内存占用上也有所不同。在32位操作系统上,long int通常占用4字节,而long long int占用8字节。在64位操作系统上,long int和int相同,通常占用8字节,而long long int通常占用16字节。

我们可以使用sizeof关键字来获取long int和long long int的内存占用情况:

#include <iostream>

int main() {
    std::cout << "long int占用" << sizeof(long int) << "字节\n";
    std::cout << "long long int占用" << sizeof(long long int) << "字节\n";
    return 0;
}

输出:

long int占用4字节
long long int占用8字节

精度要求的差异

long int和long long int在精度要求上也有不同。因为long int只有4字节,而long long int有8字节,因此使用long int时会有精度不足的情况出现。

例如:

long int a = 1234567890123456789;
std::cout << a << '\n';

输出:

-540438132

结果并不是我们预想的1234567890123456789。原因在于long int只有4字节,无法存储这么大的整数。而使用long long int就不会出现这样的问题。

long long int b = 1234567890123456789;
std::cout << b << '\n';

输出:

1234567890123456789

这里需要注意的是,使用long long int时,输出结果默认为10进制。如果想以16进制或8进制输出,可以使用std::hex或std::oct。

long long int c = 0x12345678;
std::cout << std::hex << c << '\

0x12345678

```cpp
long long int d = 04567;
std::cout << std::oct << d << '\n';

输出:

2279

运算的区别

在进行运算时,long int和long long int之间也有区别。因为long int只有4字节,因此在进行大数运算时容易溢出或精度不够。而long long int则可以用于更大范围的运算。例如:

long int a = 1234567890;
long int b = 9876543210;
long int c = a * b;
std::cout << c << '\n';

输出:

-1425958744

这个结果是不正确的,原因在于a*b超出了long int类型的表示范围。而使用long long int就不会出现这样的问题。例如:

long long int d = 1234567890123456789;
long long int e = 9876543210987654321;
long long int f = d * e;
std::cout << f << '\n';

输出:

12193263113702179549

这个结果是正确的。因此,在涉及到大数运算的时候,我们应该优先选择使用long long int。

结论

总体来说,long int可以用于较小范围的整数类型,long long int则可以用于更大范围的整数类型。在内存占用、取值范围和精度要求等方面也有所不同。在进行大数运算时,应该优先选择使用long long int,避免出现数据溢出或精度不够的情况。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程