Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C/C++ abs(), labs(), llabs() 함수 완벽 가이드

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)245349384932
  • labs(-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()를 사용하는 것이 적절합니다.