命名空间
变体
操作

std::abs, std::labs, std::llabs, std::imaxabs

来自 cppreference.cn
< cpp‎ | numeric‎ | math
 
 
 
常用数学函数
函数
基本运算
abs(int)labsllabsimaxabs
(C++11)  
(C++11)  
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
指数函数
(C++11)
(C++11)

(C++11)
(C++11)
幂函数
(C++11)
(C++11)
三角函数
双曲函数
(C++11)
(C++11)
(C++11)

误差和伽玛函数
(C++11)
(C++11)
(C++11)
(C++11)
最近整数浮点运算
(C++11)(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)(C++11)
浮点数操作函数
(C++11)(C++11)
(C++11)
(C++11)
(C++11)(C++11)
(C++11)
分类和比较
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
(C++11)
类型
(C++11)
(C++11)
(C++11)
宏常量
分类
(C++11)(C++11)(C++11)(C++11)(C++11)


 
定义于头文件 <cstdlib>
定义于头文件 <cmath>
int       abs( int num );
(1) (constexpr since C++23)
long      abs( long num );
(2) (constexpr since C++23)
long long abs( long long num );
(3) (since C++11)
(constexpr since C++23)
定义于头文件 <cstdlib>
long       labs( long num );
(4) (constexpr since C++23)
long long llabs( long long num );
(5) (since C++11)
(constexpr since C++23)
定义于头文件 <cinttypes>
(6) (since C++11)
(constexpr since C++23)
(7) (since C++11)
(constexpr since C++23)

计算整数 num 的绝对值。如果结果无法用返回类型表示,则行为未定义。

如果使用无法通过整型提升转换为 int 的无符号整型参数调用 std::abs,则程序是非良构的。

std::abs 的重载 (6)(针对 std::intmax_t)仅当 std::intmax_t扩展整数类型时,才在 <cinttypes> 中提供。

(since C++11)

目录

[编辑] 参数

num - 整数值

[编辑] 返回值

num 的绝对值(即 |num|),如果可表示。

[编辑] 注意

二补码系统中,最负值的绝对值超出范围,例如对于 32 位二补码类型 intINT_MIN-2147483648,但期望的结果 2147483648 大于 INT_MAX,后者是 2147483647

[编辑] 示例

#include <climits>
#include <cstdlib>
#include <iostream>
 
int main()
{
    std::cout << std::showpos
              << "abs(+3) = " << std::abs(3) << '\n'
              << "abs(-3) = " << std::abs(-3) << '\n';
 
//  std::cout << std::abs(INT_MIN); // undefined behavior on 2's complement systems
}

输出

abs(+3) = +3
abs(-3) = +3

[编辑] 缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的 C++ 标准。

DR 应用于 已发布行为 正确行为
LWG 2192 C++98 std::abs 的重载在
两个头文件中声明不一致
在这些头文件中声明了这些重载
在两个头文件中

[编辑] 参见

浮点值的绝对值 (|x|)
(函数) [编辑]
返回复数的模
(函数模板) [编辑]
将函数 abs 应用于 valarray 的每个元素
(函数模板) [编辑]
C 文档 关于 abs, labs, llabs