作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我很困惑为什么结果被转换为 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);
}
最佳答案
记住有符号整数数量使用最高有效位(最左边...)作为符号位会有所帮助:0
为正,1
是否定的。如果对 32 位整数“加一”0x7FFFFFFF
(除了最左边的所有位),你可能会得到 0x80000000
(最左边的位打开,所有其他位为零),因为最左边的位现在打开,被视为“负数”。而且您可能不会收到“整数溢出”异常。
关于c - 为什么这个程序会自动将结果转换为 INT_MIN 而不是整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59377083/
我是一名优秀的程序员,十分优秀!