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

C/C++ 절댓값 함수 총정리: abs(), labs(), llabs() 사용법과 예제

C++의 cstdlib 라이브러리에는 abs() 외에도 다양한 절댓값(absolute value) 계산 함수가 포함되어 있습니다. C 언어에서 abs()는 기본적으로 int 타입 입력에 사용되며, C++에서는 int, long, long long 타입까지 처리할 수 있습니다. 반면 labs()llabs()는 각각 long, long long 타입 데이터를 위해 제공되는 전용 함수입니다.

이 글에서는 세 가지 함수의 문법과 실제 사용 예제를 통해 차이점을 자세히 살펴보겠습니다.

1. abs() 함수

abs() 함수는 int 타입 데이터에 사용되며, 인자로 전달된 값의 절댓값을 반환합니다. 문법은 다음과 같습니다.

int abs(int argument)

예제 코드

#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
    int x = -145;
    int y = 145;
    cout << "Absolute value of " << x << " is: " << abs(x) << endl;
    cout << "Absolute value of " << y << " is: " << abs(y) << endl;
}

실행 결과

Absolute value of -145 is: 145
Absolute value of 145 is: 145

음수든 양수든 항상 부호가 제거된 값을 반환하는 것을 확인할 수 있습니다.

2. labs() 함수

labs() 함수는 long 타입 데이터에 사용되며, 인자로 전달된 값의 절댓값을 반환합니다. int 범위를 초과하는 큰 정수를 다룰 때 유용합니다. 문법은 다음과 같습니다.

long labs(long argument)

예제 코드

#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
    long x = -9256847L;
    long y = 9256847L;
    cout << "Absolute value of " << x << " is: " << labs(x) << endl;
    cout << "Absolute value of " << y << " is: " << labs(y) << endl;
}

실행 결과

Absolute value of -9256847 is: 9256847
Absolute value of 9256847 is: 9256847

long 리터럴임을 나타내는 접미사 L을 붙여 값을 초기화한 후, labs()로 절댓값을 구하는 모습입니다.

3. llabs() 함수

llabs() 함수는 long long 타입 데이터에 사용되며, 인자로 전달된 값의 절댓값을 반환합니다. 매우 큰 정수 범위를 처리할 수 있어 64비트 정수 연산에 적합합니다. 문법은 다음과 같습니다.

long long llabs(long long argument)

예제 코드

#include <cstdlib>
#include <iomanip>
#include <iostream>
using namespace std;
main() {
    long long x = -99887654321LL;
    long long y = 99887654321LL;
    cout << "Absolute value of " << x << " is: " << llabs(x) << endl;
    cout << "Absolute value of " << y << " is: " << llabs(y) << endl;
}

실행 결과

Absolute value of -99887654321 is: 99887654321
Absolute value of 99887654321 is: 99887654321

long long 리터럴임을 나타내는 접미사 LL을 사용하여 값을 초기화하고, llabs()로 절댓값을 계산합니다.

정리

세 함수의 차이를 표로 요약하면 다음과 같습니다.

함수대상 타입반환 타입
abs()intint
labs()longlong
llabs()long longlong long

데이터 타입의 크기에 맞는 적절한 절댓값 함수를 선택하면 오버플로우나 형 변환 문제 없이 안전하게 코드를 작성할 수 있습니다. 특히 C++11 이후에는 이 세 함수 모두 <cstdlib> 헤더에서 일관된 방식으로 제공되므로, 필요에 따라 골라 사용하시면 됩니다.