【发布时间】:2014-03-08 11:38:18
【问题描述】:
如何提取INT_MIN 的绝对值而不溢出?请参阅此代码以了解问题:
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
int main(void) {
printf("INT_MAX: %d\n", INT_MAX);
printf("INT_MIN: %d\n", INT_MIN);
printf("abs(INT_MIN): %d\n", abs(INT_MIN));
return 0;
}
吐出以下内容
INT_MAX: 2147483647
INT_MIN: -2147483648
abs(INT_MIN): -2147483648
我需要这个来检查 int 的值是否大于零。
至于这个问题与Why the absolute value of the max negative integer -2147483648 is still -2147483648? 重复,我不同意,因为这是一个如何,而不是为什么的问题。
【问题讨论】:
-
二补码中最小数的绝对值不存在。更详细地描述你想要实现的目标,我相信还有另一种方法。
-
abs的函数原型在哪里? -
只是不要在边界操作 - 奇怪和不寻常的事情会发生
-
@ninjalj:是的,但是你能说出有多少 C 的实际实现是不成立的?
标签: c int integer-overflow