在abs的man手册中,有一条NOTES:尝试取最大负整数的绝对值没有定义。
而abs的原型(prototype)是: int abs(int j);
为什么abs返回int
?由于返回值为正,为什么不返回 unsigned int
?
如果abs返回unsigned int
,最大负整数绝对值的解法很简单:
if(INT_MIN == j)
return (unsigned int)j;
最佳答案
在计算中混合有符号和无符号值会出现各种问题,因此问题是:大多数用户将如何处理调用 abs(int)
的结果?我认为最可能的答案 - 或者至少是一个非常常见的答案 - 是他们将对结果进行进一步的算术。在这种情况下,您几乎肯定希望保持在 int
范围内,而不是返回一个 unsigned
。
这是关于混合有符号和无符号计算的另一篇文章:what happens when i mix signed and unsigned types ?
关于c - 获取最大负数的绝对值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39240388/