gpt4 book ai didi

c - long long int 初始化警告

转载 作者:太空狗 更新时间:2023-10-29 17:00:38 25 4
gpt4 key购买 nike

2 个问题

首先,同时

long long int num = 1000000000000;

工作正常

long long int num = 4014109449;

给予

warning: this decimal constant is unsigned only in ISO C90 [enabled by default]

这是什么意思?

其次

long long int num = 1000000*1000000;

给出溢出警告而

long long int num = 1000000000000;

没问题,即使它们相同。我该如何摆脱它?乘法给出垃圾值

最佳答案

问题是值 4014109449 在 C90 中是一个 unsigned long int 但在 C99 中是一个 long long int 因为它太大了对于 32 位 long int。虽然 1000000000000 对于 任何 32 位类型来说都太大了,但 long long int 自动也是如此。该警告与 C90 和 C99 之间的行为不同这一事实有关。

解决方案是通过使用适当的类型后缀强制文字和变量类型之间的类型一致。在这种情况下:

long long num = 4014109449LL ;

或使用类型转换:

long long num = (long long)4014109449 ;

类似地,表达式 1000000 * 1000000 是两个 int 类型的乘积,结果为 int,但会导致溢出 - 有int 表达式不会自动升级为更大的类型。解决方案还是要明确文字的类型:

long long num = 1000000LL * 1000000LL;

或者您也可以对一个或两个操作数使用类型转换。

long long num = (long long)1000000 * 1000000;

关于c - long long int 初始化警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19819398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com