c语言long long int

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 C语言 正文

long long int 是什么?

long long int 是 C 语言中一种整数数据类型,它的主要特点是:

c语言long long int
(图片来源网络,侵删)
  • 范围大:它能表示的整数值范围比 intlong 更广。
  • 占用内存多:因为它要存储更大的数值,所以它占用的内存空间也更多。

在 C99 标准引入之前,它是一个扩展类型,并非所有编译器都支持,但从 C99 开始,long long int 正式成为 C 语言标准的一部分,所有现代 C 编译器(如 GCC, Clang, MSVC)都支持它。


基本特性

a. 大小和范围

long long int 的大小和范围取决于你的操作系统(32位还是64位)和编译器,但有一个保证的最小值

  • 大小sizeof(long long int) 保证至少是 8 字节(64位),在绝大多数现代系统(无论是 Windows, Linux 还是 macOS 的 64位或 32位环境)上,它就是正好 8 字节。
  • 范围
    • 有符号 (signed long long int)
      • 最小值:-9,223,372,036,854,775,808 (即 -2⁶³)
      • 最大值:9,223,372,036,854,775,807 (即 2⁶³ - 1)
    • 无符号 (unsigned long long int)
      • 最小值:0
      • 最大值:18,446,744,073,709,551,615 (即 2⁶⁴ - 1)

b. long long vs. long long int

在 C 语言中,int 关键字在很多情况下是可选的。long long intlong long 完全等价,你可以根据个人喜好或代码风格选择使用哪一个。long long 更为简洁,是更常见的写法。

long long int a;
long long b; // 这两种写法效果完全相同

c. 与 intlong 的比较

类型 大小 (典型值) 有符号范围 (典型值) 无符号范围 (典型值)
int 4 字节 -2,147,483,648 到 2,147,483,647 0 到 4,294,967,295
long 4 或 8 字节 (32位系统为4, 64位系统通常为8) -2,147,483,648 到 2,147,483,647 或 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0 到 4,294,967,295 或 0 到 18,446,744,073,709,551,615
long long 8 字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 0 到 18,446,744,073,709,551,615

关键点

c语言long long int
(图片来源网络,侵删)
  • long long 的范围总是int 大。
  • long 的范围在不同系统上可能和 int 一样大(32位系统),也可能和 long long 一样大(64位系统),而 long long 的范围在所有标准兼容的系统上都是固定的、最大的。

如何使用 long long

a. 声明变量

#include <stdio.h>
int main() {
    // 声明一个有符号的 long long 变量
    long long large_num = 12345678901234LL;
    // 声明一个无符号的 long long 变量
    unsigned long long very_large_num = 18446744073709551615ULL;
    printf("The value of large_num is: %lld\n", large_num);
    printf("The value of very_large_num is: %llu\n", very_large_num);
    return 0;
}

b. 字面量后缀

为了告诉编译器一个整数字面量是 long long 类型,你需要在它后面加上后缀:

  • LLll:用于有符号 long long
  • ULLull:用于无符号 long long

强烈建议使用大写的 LLULL,因为小写的 l 容易和数字 1 混淆,导致难以发现的错误。

long long a = 9999999999; // 错误!这个字面量默认是 int,可能会溢出
long long b = 9999999999LL; // 正确!明确指定为 long long 类型

c. printfscanf 的格式说明符

当你使用 printfscanf 等函数输入输出 long long 类型时,必须使用正确的格式说明符:

类型 printf 格式说明符 scanf 格式说明符
signed long long %lld %lld
unsigned long long %llu %llu

示例:

c语言long long int
(图片来源网络,侵删)
#include <stdio.h>
int main() {
    long long my_num;
    unsigned long long my_unum;
    printf("Enter a signed long long number: ");
    scanf("%lld", &my_num);
    printf("Enter an unsigned long long number: ");
    scanf("%llu", &my_unum);
    printf("You entered signed: %lld\n", my_num);
    printf("You entered unsigned: %llu\n", my_unum);
    return 0;
}

一个常见的陷阱:整数溢出

long long 的范围很大,但不是无限的,当你计算的结果超出了它的表示范围时,就会发生整数溢出,这会导致结果“回绕”,得到一个无意义的值,并且不会产生任何警告。

示例:

#include <stdio.h>
int main() {
    unsigned long long max_ull = 18446744073709551615ULL;
    printf("Max ULL: %llu\n", max_ull);
    // 加 1,会发生溢出
    max_ull = max_ull + 1;
    printf("After adding 1: %llu (it wrapped around to 0!)\n", max_ull);
    signed long long max_sll = 9223372036854775807LL;
    printf("Max SLL: %lld\n", max_sll);
    // 加 1,会发生溢出
    max_sll = max_sll + 1;
    printf("After adding 1: %lld (it wrapped around to the most negative value!)\n", max_sll);
    return 0;
}

输出:

Max ULL: 18446744073709551615
After adding 1: 0 (it wrapped around to 0!)
Max SLL: 9223372036854775807
After adding 1: -9223372036854775808 (it wrapped around to the most negative value!)

重要提示:整数溢出是 C 语言中一个常见的 Bug 来源,在进行大数运算时,务必小心检查是否可能发生溢出。


  • 用途:当你需要处理可能超出 intlong 范围的大整数时,使用 long long
  • 大小:通常是 8 字节(64位),范围是 -2⁶³2⁶³-1
  • 别名long longlong long int 是一样的。
  • 字面量:使用 LLULL 后缀来声明 long long 类型的常量。
  • I/Oprintf/scanf 使用 %lld%llu
  • 风险:注意整数溢出问题,计算前要考虑结果的值是否会超出类型范围。

在 C++ 中,long long 同样被支持,并且推荐使用 <cstdint> 头文件中的 int64_tuint64_t 等精确宽度整数类型,它们能更明确地保证类型的大小,但在纯 C 语言环境中,long long 是处理大整数最常用和最标准的方式。

-- 展开阅读全文 --
头像
数据结构 c 语言描述 pdf
« 上一篇 2025-12-28
织梦CMS如何添加发布时间?
下一篇 » 2025-12-28

相关文章

取消
微信二维码
支付宝二维码

目录[+]