【发布时间】:2012-06-29 21:02:59
【问题描述】:
abs(-2147483648) 的结果是-2147483648,不是吗? 这似乎是不可接受的。
printf("abs(-2147483648): %d\n", abs(-2147483648));
输出:
abs(-2147483648): -2147483648
【问题讨论】:
-
我相信这是未定义的行为。我手边没有 C 标准,所以无法备份。
-
鉴于
abs(int)返回int,您期望它是什么? -
C11 的最新草案说(7.21.6.1,关于abs 和朋友)“如果结果无法表示,则行为未定义”
-
@PhilipKendall 绝对值可以是负值吗?
-
linux 手册页说(man 3 abs):没有定义试图取最大负整数的绝对值。