获得最负数的绝对值

时间:2016-08-31 03:46:11

标签: c

在abs的man手册中,有一个注意事项:没有定义试图取最负整数的绝对值。

abs的原型是:int abs(int j);

为什么abs会返回int?由于返回值为正,为什么不返回unsigned int

如果abs返回unsigned int,则最负整数的绝对值的解是这样的简单:

if(INT_MIN == j) 
  return (unsigned int)j; 

2 个答案:

答案 0 :(得分:4)

在计算中混合有符号值和无符号值时存在各种问题,因此问题是:大多数用户与调用abs(int)的结果有什么关系?我认为最可能的答案 - 或者至少是一个非常普遍的答案 - 是他们会对结果进行进一步的算术运算。在这种情况下,您几乎肯定希望保持int而不是取回unsigned

这是另一篇关于使用无符号计算签名的混音帖子:what happens when i mix signed and unsigned types ?

答案 1 :(得分:-2)

16位有符号整数的范围为-32768+32767

因此INT_MIN将是-32768。它的绝对值超出整数范围。因此没有定义。