首页  >  文章  >  后端开发  >  为什么代码片段在将大整数文字分配给“long”变量时会失败,但在使用“long long”时却有效?

为什么代码片段在将大整数文字分配给“long”变量时会失败,但在使用“long long”时却有效?

DDD
DDD原创
2024-11-08 11:12:02168浏览

Why does the code snippet fail when assigning a large integer literal to a `long` variable, but works when using `long long`?

理解 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;
}

执行此代码时,如果您执行以下操作,则可能会遇到错误:取消注释行:

// num3 = 100000000000;

错误读取:

“错误:整数常量是对于长类型来说太大了”

但是,当您编译并运行代码而不取消注释该行时,它输出的值明显大于 10000000000。为什么?

理解整数文字和数据类型

在 C/C 中,整数文字是常量代表数值。整数文字的类型由后缀确定,例如“L”或“LL”。如果没有后缀,则默认情况下将文字视为“int”。

在提供的代码中,值“100000000000”太大,无法用“long”数据类型表示。因此,您必须添加后缀来指示预期的数据类型。

正确分配文字

要解决错误,您应该使用正确的后缀分配文字,如下所示:

long long num3 = 100000000000LL;

后缀'LL'表示文字应该是被视为“long long”类型,可以容纳更大范围的值。

更新后的行将值“100000000000”分配给“num3”,而不会触发错误。这确保了变量“num3”可以保存并操作预期的大数值。

以上是为什么代码片段在将大整数文字分配给“long”变量时会失败,但在使用“long long”时却有效?的详细内容。更多信息请关注PHP中文网其他相关文章!

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