C++11标准模板(STL)- 常用数学函数 - 计算整数值的绝对值( |x| ) (std::abs(int), std::labs, std::llabs, std::imaxabs)

常用数学函数

计算整数值的绝对值( |x| )

std::abs(int), 
std::labs, 
std::llabs, 
std::imaxabs

定义于头文件 <cstdlib>

定义于头文件 <cmath>

(C++17 起)

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 起)

计算整数的绝对值。若结果不能以返回类型表示则行为未定义。

若以满足 std::is_unsigned<X>::value 为 trueX 类型参数调用 std::abs ,且 X 不能以整数提升转换成 int ,则程序为病式。

(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值