常用数学函数
计算整数值的绝对值( |x| )
std::abs(int),
std::labs,
std::llabs,
std::imaxabs
定义于头文件 | ||
定义于头文件 | (C++17 起) | |
int abs( int n ); | ||
long abs( long n ); | ||
long long abs( long long n ); | (C++11 起) | |
定义于头文件 | ||
long labs( long n ); | ||
long long llabs( long long n ); | (C++11 起) | |
定义于头文件 | ||
std::intmax_t abs( std::intmax_t n ); | (C++11 起) | |
std::intmax_t imaxabs( std::intmax_t n ); | (C++11 起) |
计算整数的绝对值。若结果不能以返回类型表示则行为未定义。
若以满足 std::is_unsigned<X>::value 为 | (C++17 起) |
参数
n | - | 整数值 |
返回值
若可表示,则为 n
的绝对值(即 |n|
)。
注意
补码系统中,最负值的绝对值在范围外,例如对于 32 位补码类型 int , INT_MIN 是 -2147483648 ,但本应有的结果 2147483648 大于 INT_MAX ,即 2147483647 。
调用示例
#include <iostream>
#include <cstdlib>
#include <typeinfo>
#include <cinttypes>
int main()
{
//计算整数的绝对值。若结果不能以返回类型表示则行为未定义。
const int iNumber = 1024;
std::cout << "typeid(int).name(): " << typeid(int).name() << std::endl;
std::cout << "std::abs(" << iNumber << "): "
<< std::abs(iNumber) << std::endl;
std::cout << "std::abs(" << -iNumber << "): "
<< std::abs(-iNumber) << std::endl;
std::cout << std::endl;
const long lNumber = 10240;
std::cout << "typeid(long).name(): " << typeid(long).name() << std::endl;
std::cout << "std::abs(" << lNumber << "): "
<< std::abs(lNumber) << std::endl;
std::cout << "std::abs(" << -lNumber << "): "
<< std::abs(-lNumber) << std::endl;
std::cout << std::endl;
std::cout << "typeid(long).name(): " << typeid(long).name() << std::endl;
std::cout << "std::labs(" << lNumber << "): "
<< std::labs(lNumber) << std::endl;
std::cout << "std::labs(" << -lNumber << "): "
<< std::labs(-lNumber) << std::endl;
std::cout << std::endl;
const long long llNumber = 102400;
std::cout << "typeid(long long).name(): " << typeid(long long).name() << std::endl;
std::cout << "std::abs(" << llNumber << "): "
<< std::abs(llNumber) << std::endl;
std::cout << "std::abs(" << -llNumber << "): "
<< std::abs(-llNumber) << std::endl;
std::cout << std::endl;
std::cout << "typeid(long long).name(): " << typeid(long long).name() << std::endl;
std::cout << "std::llabs(" << llNumber << "): "
<< std::llabs(llNumber) << std::endl;
std::cout << "std::llabs(" << -llNumber << "): "
<< std::llabs(-llNumber) << std::endl;
std::cout << std::endl;
const std::intmax_t intmaxNumber = 102400;
std::cout << "typeid(std::intmax_t).name(): "
<< typeid(std::intmax_t).name() << std::endl;
std::cout << "std::abs(" << intmaxNumber << "): "
<< std::abs(intmaxNumber) << std::endl;
std::cout << "std::abs(" << -intmaxNumber << "): "
<< std::abs(-intmaxNumber) << std::endl;
std::cout << std::endl;
std::cout << "typeid(std::intmax_t).name(): "
<< typeid(std::intmax_t).name() << std::endl;
std::cout << "std::imaxabs(" << intmaxNumber << "): "
<< std::imaxabs(intmaxNumber) << std::endl;
std::cout << "std::imaxabs(" << -intmaxNumber << "): "
<< std::imaxabs(-intmaxNumber) << std::endl;
std::cout << std::endl;
return 0;
}
输出
typeid(int).name(): i
std::abs(1024): 1024
std::abs(-1024): 1024
typeid(long).name(): l
std::abs(10240): 10240
std::abs(-10240): 10240
typeid(long).name(): l
std::labs(10240): 10240
std::labs(-10240): 10240
typeid(long long).name(): x
std::abs(102400): 102400
std::abs(-102400): 102400
typeid(long long).name(): x
std::llabs(102400): 102400
std::llabs(-102400): 102400
typeid(std::intmax_t).name(): x
std::abs(102400): 102400
std::abs(-102400): 102400
typeid(std::intmax_t).name(): x
std::imaxabs(102400): 102400
std::imaxabs(-102400): 102400