数据类型——long long
在C语言中,long long
类型是一种有符号的64位整数,其取值范围由二进制补码表示法决定。以下是具体数值及解释:
1. long long
的最大值
-
最大值(正数):
9223372036854775807
计算方式:2^63 - 1
这是因为最高位是符号位(0表示正数),剩余的63位用于数值。 -
最小值(负数):
-9223372036854775808
计算方式:-2^63
二进制补码表示法中,负数的最小值比正数最大值多一个单位。
2. 如何获取这些值?
C标准库 <limits.h>
中定义了以下宏,可直接在代码中使用:
LLONG_MAX
:表示long long
的最大值(9223372036854775807
)。LLONG_MIN
:表示long long
的最小值(-9223372036854775808
)。
示例代码:
#include <stdio.h>
#include <limits.h>
int main() {
printf("long long 最大值: %lld\n", LLONG_MAX);
printf("long long 最小值: %lld\n", LLONG_MIN);
return 0;
}
3. unsigned long long
的最大值
若使用无符号类型 unsigned long long
(64位全用于数值):
- 最大值:
18446744073709551615
计算方式:2^64 - 1
- 对应的宏为
ULLONG_MAX
。
示例代码:
#include <stdio.h>
#include <limits.h>
int main() {
printf("unsigned long long 最大值: %llu\n", ULLONG_MAX);
return 0;
}
4. 应用场景
- 大整数计算:处理超过
int
或long
范围的数值(如金融计算、科学模拟)。 - 避免溢出:在循环或数学运算中,确保结果不超出范围。例如:
需通过条件判断或使用大数库(如GMP)来规避溢出风险。long long a = LLONG_MAX; long long b = 1; long long sum = a + b; // 这里会导致溢出(未定义行为)!
5. 注意事项
- 平台兼容性:C标准规定
long long
至少为64位,但实际大小可通过sizeof(long long)
验证。 - 打印格式:使用
%lld
和%llu
正确格式化输出:long long x = 123456789012345LL; unsigned long long y = 18446744073709551615ULL; printf("%lld, %llu\n", x, y);
总结
类型 | 最大值 | 最小值 | 宏定义 |
---|---|---|---|
long long | 9223372036854775807 | -9223372036854775808 | LLONG_MAX/MIN |
unsigned long long | 18446744073709551615 | 0 | ULLONG_MAX |
如果需要处理更大的数值,需依赖高精度库(如GMP)或自定义数据结构。