std::abs(int), std::labs, std::llabs, std::imaxabs
来自cppreference.com
定义于头文件 <cstdlib>
|
||
定义于头文件 <cmath>
|
||
int abs( int n ); |
||
long abs( long n ); |
||
long long abs( long long n ); |
(C++11 起) | |
定义于头文件 <cstdlib>
|
||
long labs( long n ); |
||
long long llabs( long long n ); |
(C++11 起) | |
定义于头文件 <cinttypes>
|
||
std::intmax_t abs( std::intmax_t n ); |
(C++11 起) | |
std::intmax_t imaxabs( std::intmax_t n ); |
(C++11 起) | |
计算整数的绝对值。若结果不能以返回类型表示则行为未定义。
若以不能由整型提升转换成 int 的无符号整型参数调用 std::abs
,则程序为谬构。
|
(C++11 起) |
参数
n | - | 整数值 |
返回值
若可表示,则为 n
的绝对值(即 |n|
)。
注解
补码系统中,最负值的绝对值在范围外,例如对于 32 位补码类型 int , INT_MIN 是 -2147483648 ,但本应有的结果 2147483648 大于 INT_MAX ,即 2147483647 。
示例
运行此代码
#include <iostream> #include <cstdlib> #include <climits> int main() { std::cout << "abs(+3) = " << std::abs(3) << '\n' << "abs(-3) = " << std::abs(-3) << '\n'; // std::cout << abs(INT_MIN); // 补码系统上是未定义行为 }
输出:
abs(+3) = 3 abs(-3) = 3
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
DR | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
LWG 2192 | C++98 | std::abs 的重载不一致地声明于二个头文件
|
在两个头文件中都声明这些重载 |
参阅
(C++11)(C++11) |
浮点值的绝对值( |x| ) (函数) |
返回复数的模 (函数模板) | |
应用函数 std::abs 到 valarray 的每个元素 (函数模板) |