您的位置:

C++ 取绝对值的详细阐述

一、基础用法

#include <iostream>
#include <cmath>

int main() {
    int x = -1;
    int abs_x = std::abs(x);
    std::cout<< abs_x << std::endl;
    return 0;
}

C++ 中的 `abs()` 函数用来计算整数的绝对值。当参数为整型时,直接调用即可。当参数为浮点型时,需要使用 `fabs()` 函数计算浮点型的绝对值。

二、自定义函数

#include <iostream>

template <typename T>
T my_abs(T x) {
    return x < 0 ? -x : x;
}

int main() {
    int x = -1;
    int abs_x = my_abs(x);
    std::cout<< abs_x << std::endl;
    return 0;
}

除了使用标准库提供的 `abs()` 函数,我们也可以自己定义一个函数来计算绝对值。上面的代码中使用了一个模板函数,可以适用于不同类型的参数。

三、位运算的技巧

#include <iostream>

int my_abs(int x) {
    int mask = x >> 31;
    return (x + mask) ^ mask;
}

int main() {
    int x = -1;
    int abs_x = my_abs(x);
    std::cout<< abs_x << std::endl;
    return 0;
}

在 C++ 中,我们可以通过位运算来计算整数的绝对值。以 int 类型为例,我们可以通过右移 31 位来取到数值的最高位,然后将最高位与数值相加后异或最高位的结果来得到绝对值。

四、cmath 库的使用

#include <iostream>
#include <cmath>

int main() {
    double x = -1.23;
    double abs_x = std::fabs(x);
    std::cout << abs_x << std::endl;
    return 0;
}

除了上面提到的两种方法外,我们还可以使用 `cmath` 头文件中的 `fabs()` 函数计算浮点型的绝对值。需要注意的是,这里要使用 `double` 类型作为参数。