gpt4 book ai didi

c - 在C中使最小整数值为正

转载 作者:太空宇宙 更新时间:2023-11-04 08:11:01 25 4
gpt4 key购买 nike

所以我得到了以下代码

printf("atoi(input) = %d\n", atoi(input));
long number = 0;
if(atol(input) < 0){
printf("went into here\n");
printf("atoi = %d\n", atoi(input));
number = -1 * atoi(input);
printf("number = %d\n", number);
}else{
number = atoi(input);
}

但出于某种原因,当我的用户输入 -2147483648(可能还有其他非常大的小数)时,乘以 -1 不起作用,数字仍然为负数。有什么想法吗?

最佳答案

不幸的是,分配给任何标准类型的内存都是有限的,因此所有类型的范围都有非常明确的边界。违反边界会导致计算错误。

了解整数类型(不仅是 int,还有 charshort 等)的边界(例如最小和最大可能值) .) 你可以使用 limits.h。例如:

#include <stdio.h>
#include <limits.h>

int main(void)
{
printf("INT_MIN = %d\n", INT_MIN);
printf("INT_MAX = %d\n", INT_MAX);
printf("LONG_MIN = %ld\n", LONG_MIN);
printf("LONG_MAX = %ld\n", LONG_MAX);
printf("LLONG_MIN = %lld\n", LLONG_MIN);
printf("LLONG_MAX = %lld\n", LLONG_MAX);
return 0;
}

注意:

1) 限制值取决于编译器和平台(例如,对于我的系统,LONG_MIN 等于 INT_MIN,但您可能会看到不同的值);

2) limits.h 只是一个文本文件,可以被修改和探索

3) 还了解 stdint.h,它提供具有固定大小的类型(并允许程序在我的第一个注释中没有“也许”的情况下可移植)

4) 有一些技巧可以detect integer overflow

关于c - 在C中使最小整数值为正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39481285/

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