在abs的man手册中,有一个注意事项:没有定义试图取最负整数的绝对值。
abs的原型是:int abs(int j);
为什么abs会返回int
?由于返回值为正,为什么不返回unsigned int
?
如果abs返回unsigned int
,则最负整数的绝对值的解是这样的简单:
if(INT_MIN == j)
return (unsigned int)j;
答案 0 :(得分:4)
在计算中混合有符号值和无符号值时存在各种问题,因此问题是:大多数用户与调用abs(int)
的结果有什么关系?我认为最可能的答案 - 或者至少是一个非常普遍的答案 - 是他们会对结果进行进一步的算术运算。在这种情况下,您几乎肯定希望保持int
而不是取回unsigned
。
这是另一篇关于使用无符号计算签名的混音帖子:what happens when i mix signed and unsigned types ?
答案 1 :(得分:-2)
16位有符号整数的范围为-32768
到+32767
因此INT_MIN
将是-32768
。它的绝对值超出整数范围。因此没有定义。