사용범위
Windows, Unix 등 모든 OS에서 사용가능한 표준 API 함수
기능
C언어 표준 함수로 입력받은 정수의 절대값을 계산하기 위해 사용한다.
헤더
#include <stdlib.h>
※ 함수 사용시 stdlib.h 파일을 include 하지 않는다면 컴파일 시 error 발생 ※
함수
int abs(int n);
파라미터
- int n
- 절대값을 구할 정수를 입력한다.
반환값
성공시 인자로 전달한 정수 n의 절대값을 반환한다.
오류 반환값이 없다.
잡학지식
abs 함수는 전달 받은 정수 n의 절대값을 반환하는 함수이다.
하지만 int는 대부분의 환경에서 크기 4byte를 가지기에 표현할 수 있는 범위의 한계가 존재한다. (부호비트 포함)
따라서 int의 범위 INT_MIN(-2,147,483,648) ~ INT_MAX(2147483647) 범위에서 INT_MIN에 해당하는 INT_MIN(-2,147,483,648) 값은 부호비트로 인해 +2,147,483,648 표기를 할 수 없으므로 abs 함수를 호출해도 여전히 INT_MIN(-2,147,483,648) 값을 반환한다. (INT_MIN 과 INT_MAX 는 limits.h 헤더파일에 정의되어 있다.)
<소스 코드>
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
int main() {
int num1 = -12345;
int num2 = 54321;
int num3 = INT_MIN;
long long num4 = -123456789000;
printf("(-) num1[%d] absolute[%d]\n", num1, abs(num1));
printf("(+) num2[%d] absolute[%d]\n", num2, abs(num2));
printf("(INT_MIN) num3[%d] absolute[%d]\n", num3, abs(num3));
printf("(overflow) num4[%lld] absolute[%d]\n", num4, abs(num4));
return 0;
}
※ 실행 결과
(-) num1[-12345] absolute[12345]
(+) num2[54321] absolute[54321]
(INT_MIN) num3[-2147483648] absolute[-2147483648]
(overflow) num4[-123456789000] absolute[1097262584]
-123,456,789,000 값이 1,097,262,584 값으로 출력된 원인은 abs 함수에서 int의 4byte 영역만 계산을 하기 때문이다.
-123,456,789,000 값은 8byte의 hex값으로 보면 0xFFFF FFE3 4166 E5F8 이며 int 로 형변환을 하면 0x4166 E5F8 값만 남게 된다.
따라서 abs 함수를 통해 0x4166E5F8 값이 처리되어 1,097,262,584 라는 결과가 나오게 된다.
반응형
'C언어 > stdlib.h' 카테고리의 다른 글
[C언어] atoi 함수 (문자열을 숫자로 변환) (0) | 2023.04.02 |
---|---|
[C언어] realloc (heap 메모리 크기 변경) (0) | 2023.03.28 |
[C언어] free 함수 (heap 메모리 해제) (0) | 2023.03.26 |
[C언어] calloc 함수 (초기화된 heap 메모리 할당) (0) | 2023.03.02 |
[C언어] malloc 함수 (heap 메모리 할당) (1) | 2023.03.01 |