首页 >后端开发 >C++ >为什么'long long”在 C/C 中的行为与预期不同?

为什么'long long”在 C/C 中的行为与预期不同?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-08 10:04:01213浏览

Why does  `long long` behave differently than expected in C/C  ?

理解 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn