labs
abs, labs, llabs, imaxabs
在头文件 | | |
---|---|---|
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 | - | 整数值 |
---|
返回值
n
(i.e. |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):