C 표준 라이브러리의 정수 절댓값 함수란?
C/C++ 표준 라이브러리에는 정수형 값의 절댓값을 계산하는 함수들이 있습니다. 이 함수들은 음수 기호를 제거한 순수한 수치 값을 반환하며, 입력받은 정수 타입에 따라 abs(), labs(), llabs() 세 가지 버전으로 나뉩니다.
세 함수의 원형은 다음과 같습니다.
int = abs(int n); long = labs(long n); long long = llabs(long long n);
여기서 n은 절댓값을 구하고자 하는 정수 값입니다.
이 세 함수는 모두 C++에서 <cstdlib>(C 표준 범용 유틸리티 라이브러리) 헤더 파일에 정의되어 있으며, 인자로 전달된 정수의 절댓값, 즉 부호를 제거한 값을 반환합니다.
1. abs() 함수
abs() 함수는 int 타입 값의 절댓값을 구하는 기본 함수입니다. C 언어에서는 입력과 출력 모두 'int' 타입으로 고정되지만, C++에서는 'int', 'long int', 'long long int' 등 입력 타입에 따라 오버로딩되어 처리되며, 출력 역시 입력과 동일한 데이터 타입으로 반환됩니다.
abs() 함수는 주어진 숫자에서 음수·양수 부호를 모두 제거한 값을 평가합니다. 따라서 항상 양수를 반환한다고 볼 수 있습니다.
abs(-43)→ 음수 부호가 제거되어 43 반환abs(12)→ 부호가 없으므로 그대로 12 반환
예제 코드
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
int a = abs(123);
int b = abs(-986);
cout << "abs(123) = " << a << "\n";
cout << "abs(-986) = " << b << "\n";
return 0;
}실행 결과
abs(123) = 123 abs(-986) = 986
2. labs() 함수
labs() 함수는 abs()의 long int 버전입니다. 입력과 출력 모두 long int 타입으로 처리되며, 동작 방식은 abs()와 동일하게 음수 부호를 제거합니다. 차이점이라면 int 범위를 넘어서는 큰 long 타입의 값도 문제없이 처리할 수 있다는 것입니다.
labs(245349384932L)→ 245349384932labs(-34235668687987L)→ 34235668687987
예제 코드
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
long int a = labs(437567342L);
long int b = labs(-8764523L);
cout << "labs(437567342L) = " << a << "\n";
cout << "labs(-8764523L) = " << b << "\n";
return 0;
}실행 결과
labs(437567342L) = 437567342 labs(-8764523L) = 8764523
3. llabs() 함수
llabs() 함수는 abs()의 long long int 버전입니다. 입력과 출력 모두 long long int 타입으로 처리되며, long 타입보다 훨씬 큰 범위의 정수 값에 대해서도 안전하게 절댓값을 계산할 수 있습니다.
예제 코드
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
long long int a = llabs(9796546325253547656LL);
long long int b = llabs(-1423446557676111567LL);
cout << "llabs(9796546325253547656LL) = " << a << "\n";
cout << "llabs(-1423446557676111567LL) = " << b << "\n";
return 0;
}실행 결과
llabs(9796546325253547656LL) = 9796546325253547656 llabs(-1423446557676111567LL) = 1423446557676111567
함수 비교 요약
| 함수 | 입력/출력 타입 | 헤더 파일 |
|---|---|---|
| abs() | int | <cstdlib> |
| labs() | long int | <cstdlib> |
| llabs() | long long int | <cstdlib> |
정리하면, 세 함수 모두 동일한 절댓값 계산 기능을 수행하지만 처리할 수 있는 정수의 크기 범위가 다릅니다. 일반적인 정수에는 abs(), 큰 정수에는 labs(), 매우 큰 정수에는 llabs()를 사용하는 것이 적절합니다.