gpt4 book ai didi

c - 为什么long long int不会溢出?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:14:08 28 4
gpt4 key购买 nike

long long int a;
scanf("%lld",&a);
printf("n : %lld\n",a);

输入是 9223372036854775808 (LLONG_MAX + 1)

但输出是 9223372036854775807 (LLONG_MAX)

x64 GNU/Linux 和我使用 GCC 编译器

最佳答案

scanf 中的溢出会触发未定义的行为。

但是,许多流行的 scanf 实现在内部使用 strto... 组中的函数将字符串转换为实际数字。 (或者,更准确地说,它们使用与 strto... 函数相同的低级实现原语。)strto... 函数生成目标类型的最大值溢出。该实现的副作用是您在测试中观察到的。显然使用了 strtoll,它在正溢出时产生 LLONG_MAX

但是你不应该依赖它,因为行为是未定义的。

关于c - 为什么long long int不会溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27795024/

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