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

C++의 signed와 unsigned 키워드, 정확히 무엇이 다를까?

C++의 모든 숫자 타입은 부호(sign)를 가질 수도 있고, 가지지 않을 수도 있습니다. 예를 들어, int를 양의 정수만 표현하도록 선언하는 것이 가능합니다.

별도로 지정하지 않는 한, C++의 모든 정수 데이터 타입은 기본적으로 부호 있는(signed) 타입입니다. 즉, 양수와 음수 값을 모두 가질 수 있다는 의미입니다. 반면 unsigned 키워드를 사용하면 부호가 없는 변수를 선언할 수 있으며, 이 경우 변수는 0과 양수만 표현합니다.

예제 코드

#include<iostream>
using namespace std;

int main() {
    unsigned int i = -1;
    int x = i;
    cout << i << ", " << x;
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

4294967295, -1

결과 분석

이러한 출력이 나오는 이유는 다음과 같습니다. -1unsigned int에 대입하면, 내부적인 2의 보수(two's complement) 비트 표현상 모든 비트가 1로 채워지게 됩니다. 그 결과 32비트 기준으로 unsigned int가 표현할 수 있는 최대값인 4,294,967,295가 출력됩니다. 즉, 변수 i에는 부호가 없기 때문에 음수 개념이 존재하지 않습니다.

반면 변수 x는 일반적인 int, 즉 부호 있는 타입이므로 같은 비트 패턴을 음수인 -1로 해석하게 됩니다.

정리

signed 타입은 양수와 음수를 모두 표현할 수 있고, unsigned 타입은 0 이상의 값만 표현하지만 그 대신 더 넓은 양수 범위를 사용할 수 있습니다. 따라서 오버플로우나 예상치 못한 값 변환을 방지하려면 두 타입의 특성을 정확히 이해하고 사용하는 것이 중요합니다.