c - 获取最大负数的绝对值

标签 c

在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/

相关文章:

c - 在二叉搜索树中查找节点的父节点

c - C 中的嵌套结构和指针

c - 将长时间运行的子进程的输出重定向到父进程

c - 参数类型对此链接类型的函数无效

c++ - 字符串的值不同,但打印它们显示相同的值

C RegEnumKeyExA 接收 ERROR_MORE_DATA 的问题

c - 可能的 GCC 错误 : Long arguments shortened when linking a library to project. C\C++

android - dlopen() 在 Android 上失败,但在 Linux 上有效

c - `int` 总是签名的吗?

c 将 uint32_t 转换为 int32 保存到文件并读取 uint32_t Agein