C
数值 | Numerics

abs

abs, labs, llabs, imaxabs

Defined in header
int abs( int n
long labs( long n
long long llabs( long long n (since C99)
Defined in header <inttypes.h>
intmax_t imaxabs( intmax_t n (since C99)

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

参数

n-integer value

返回值

n(ie |n|)的绝对值,如果它是可表示的。

笔记

在2的补码系统中,最大负值的绝对值超出范围,例如对于32位2的补码类型int,INT_MIN是-2147483648,但是可能结果2147483648大于INT_MAX,即2147483647。

#include <stdio.h> #include <stdlib.h> #include <limits.h> int main(void) { printf("abs(+3) = %d\n", abs(+3) printf("abs(-3) = %d\n", abs(-3) // printf("%+d\n", abs(INT_MIN) // undefined behavior on 2's complement systems }

输出:

abs(+3) = 3 abs(-3) = 3

参考

  • C11标准(ISO / IEC 9899:2011):