首页 > 编程笔记 > C语言笔记

C语言中取绝对值的函数(6个)

在C语言中,取绝对值是一个常见的操作,用于获取一个数的正值,无论这个数原本是正数还是负数。C 标准库提供了多个函数来计算不同数据类型的绝对值,这些函数分布在 <stdlib.h> 和 <math.h> 两个头文件中。
 

C语言绝对值函数汇总
函数名 头文件 参数类型 返回类型 说明
abs() <stdlib.h> int int 整数绝对值
labs() <stdlib.h> long long 长整型绝对值
llabs() <stdlib.h> long long long long 长长整型绝对值
fabs() <math.h> double double 浮点数绝对值
fabsf() <math.h> float float 单精度浮点数绝对值
fabsl() <math.h> long double long double 长双精度浮点数绝对值


对于整数类型,我们主要使用 abs()、labs() 和 llabs() 函数,这些函数都定义在 <stdlib.h> 头文件中:abs() 函数用于 int 类型,labs() 函数用于 long 类型,而 llabs() 函数则用于 long long 类型。
 

这些函数的使用非常直观,只需将要取绝对值的数作为参数传入即可,下面是一个使用这些函数的示例:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int a = -5;
    long b = -1000000L;
    long long c = -1000000000000LL;

    printf("abs(%d) = %d\n", a, abs(a));
    printf("labs(%ld) = %ld\n", b, labs(b));
    printf("llabs(%lld) = %lld\n", c, llabs(c));

    return 0;
}

输出结果:

abs(-5) = 5
labs(-1000000) = 1000000
llabs(-1000000000000) = 1000000000000


对于浮点数类型,我们使用 fabs()、fabsf() 和 fabsl() 函数,这些函数定义在 <math.h> 头文件中:fabs() 函数用于 double 类型,fabsf() 函数用于 float 类型,而 fabsl() 函数则用于 long double 类型。
 

这些函数的使用方式与整数类型的绝对值函数类似,以下是一个使用这些函数的示例:

#include <stdio.h>
#include <math.h>

int main() {
    float f = -3.14f;
    double d = -2.71828;
    long double ld = -1.6180339887498948482L;

    printf("fabsf(%f) = %f\n", f, fabsf(f));
    printf("fabs(%f) = %f\n", d, fabs(d));
    printf("fabsl(%Lf) = %Lf\n", ld, fabsl(ld));

    return 0;
}

输出结果:

fabsf(-3.140000) = 3.140000
fabs(-2.718280) = 2.718280
fabsl(-1.618034) = 1.618034


在使用这些函数时,有两个重要的注意事项:

 

最后,值得一提的是,虽然C语言提供了这些便捷的绝对值函数,但了解它们的底层实现原理也很有益处。例如,对于整数类型,绝对值的计算通常可以通过位操作实现:

int abs_custom(int x) {
    int mask = x >> (sizeof(int) * 8 - 1);
    return (x + mask) ^ mask;
}

这个实现利用了算术右移的特性,通过创建一个全 0(对于正数)或全 1(对于负数)的掩码来实现绝对值的计算。虽然这种实现方式在某些情况下可能比标准库函数更快,但它的可读性较差,且可能不如标准库函数那样可靠和可移植。因此,除非在极端的性能优化场景下,否则还是推荐使用标准库提供的绝对值函数。

相关文章