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