【发布时间】:2017-01-21 17:16:01
【问题描述】:
所以我有以下代码
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 不起作用,并且数字仍然是负数。有什么想法吗?
【问题讨论】:
-
因为 32 位有符号整数值不能是 +2147483648。 -2147483648 的二进制补码是 -2147483648。
-
天哪,我真笨。这个赋值甚至应该让我们熟悉 32 位的无符号/有符号/二进制限制
-
如果您在
long是 64 位类型(除 Windows 之外的大多数地方)时在系统上编译 64 位,则将其设置为-1L * atoi(input)将通过强制升级来解决该极端情况long. -
不幸的是,我正在为一个班级和我的 32 位 RaspPi 做这个,所以就是这样
-
@JosephPerez 没有什么能阻止 Pi 进行 64 位数学运算