gpt4 book ai didi

c - 为什么这个程序会自动将结果转换为 INT_MIN 而不是整数溢出?

转载 作者:行者123 更新时间:2023-12-04 10:43:28 24 4
gpt4 key购买 nike

我很困惑为什么结果被转换为 INT_MIN 而不是整数溢出?
有任何想法吗?

#include <stdio.h>

int ft_atoi(const char *str)
{
int sign;
int result;

sign = 1;
result = 0;
while (*str == 32 || (*str >= 9 && *str <= 13))
str++;
if (*str == '+')
str++;
else if (*str == '-')
{
sign = -1;
str++;
}
while (*str >= '0' && *str <= '9')
{
printf("before: %d\n", result);
result = (result * 10) + *str - '0';
printf("after: %d\n", result);
str++;
}
return (sign * result);
}

int main(void)
{
printf("%d\n", ft_atoi("-2147483648"));
return (0);
}

结果:
e1z2r7p5% ./a.out
之前:0
之后:2
之前:2
之后:21
之前:21
之后:214
之前:214
之后:2147
之前:2147
之后:21474
之前:21474
之后:214748
之前:214748
后:2147483
之前:2147483
后:21474836
之前:21474836
后:214748364
之前:214748364
之后:-2147483648
-2147483648

最佳答案

记住有符号整数数量使用最高有效位(最左边...)作为符号位会有所帮助:0为正,1是否定的。如果对 32 位整数“加一”0x7FFFFFFF (除了最左边的所有位),你可能会得到 0x80000000 (最左边的位打开,所有其他位为零),因为最左边的位现在打开,被视为“负数”。而且您可能不会收到“整数溢出”异常。

关于c - 为什么这个程序会自动将结果转换为 INT_MIN 而不是整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377083/

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