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

来自cppreference.com
< 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)
 
在标头 <cstdlib> 定义
在标头 <cmath> 定义
int       abs( int num );
(1) (C++23 起 constexpr)
long      abs( long num );
(2) (C++23 起 constexpr)
long long abs( long long num );
(3) (C++11 起)
(C++23 起 constexpr)
在标头 <cstdlib> 定义
long       labs( long num );
(4) (C++23 起 constexpr)
long long llabs( long long num );
(5) (C++11 起)
(C++23 起 constexpr)
在标头 <cinttypes> 定义
(6) (C++11 起)
(C++23 起 constexpr)
(7) (C++11 起)
(C++23 起 constexpr)

计算整数 num 的绝对值。如果结果不能以返回类型表示,那么行为未定义。

如果以不能由整型提升转换成 int 的无符号整数类型参数调用 std::abs,那么程序非良构。

只有在 std::intmax_t扩展整数类型时,<cinttypes> 中才会提供 std::absstd::intmax_t 的重载。

(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 << abs(INT_MIN); // 补码系统上行为未定义
}

输出:

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

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2192 C++98 std::abs 的重载不一致地在两个头文件声明 在两个头文件中都声明这些重载

参阅

浮点值的绝对值(|x|
(函数)
返回复数的模
(函数模板)
应用函数 std::abs 到 valarray 的每个元素
(函数模板)