理解 C/C 中的 Long Long
在 C 和 C 中处理各种数据类型时,了解每种数据类型的细微差别至关重要类型。一种常见的误解是 long long 的行为。
考虑以下代码片段:
#include <stdio.h> int main() { int num1 = 1000000000; long num2 = 1000000000; long long num3; //num3 = 100000000000; long long num4 = ~0; printf("%u %u %u", sizeof(num1), sizeof(num2), sizeof(num3)); printf("%d %ld %lld %llu", num1, num2, num3, num4); return 0; }
取消注释将 100000000000 分配给 num3 的行时,编译此代码会引发错误:“整数常量是对于长型来说太大了。”但是,执行带有注释行的代码仍然会打印大于 10000000000 的值。
此行为源于对类型推断的误解。文字 100000000000 是一个整型常量,但其值超出了 int 数据类型的范围(32 位)。因此,它被设计为一个长类型常量。但是,默认情况下,C 和 C 将此类文字视为 int,从而导致错误。
要解决此问题,需要使用后缀显式指定文字的类型。 LL 后缀将 num3 声明为 long long 类型:
long long num3 = 100000000000LL;
此更改允许代码成功编译,不会出现任何错误或意外行为。
以上是为什么'long long”在 C/C 中的行为与预期不同?的详细内容。更多信息请关注PHP中文网其他相关文章!