>백엔드 개발 >C++ >-1을 빈 벡터의 크기와 비교하면 C에서 '더 큰' 결과가 나오는 이유는 무엇입니까?

-1을 빈 벡터의 크기와 비교하면 C에서 '더 큰' 결과가 나오는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-07 22:42:14781검색

Why Does Comparing -1 to an Empty Vector's Size Result in

-1을 벡터 크기 0과 비교하면 "더 큰" 결과가 나오는 이유

퍼즐

C에서 다음 코드 조각은 예상치 못한 출력 "Greater":

#include <iostream>
#include <vector>

int main() {
    std::vector<int> a;
    std::cout << "vector size " << a.size() << std::endl;

    int b = -1;
    if (b < a.size())
        std::cout << "Less";
    else
        std::cout << "Greater";
}

출력:

vector size 0
Greater

Unraveling the Mystery

이 반직관적인 동작의 이유는 비교되는 값 간의 유형 차이에 있습니다. a.size()는 벡터의 음수가 아닌 크기를 나타내는 부호 없는 정수를 반환합니다. 반면에 b는 부호 있는 정수이며 음수 값 -1을 보유합니다.

이 두 값을 비교할 때 C는 암시적으로 부호 없는 승격을 수행합니다. 결과적으로 b는 부호 없는 큰 정수로 승격된 다음 부호 없는 a.size()와 비교됩니다. 부호 없는 큰 값이 0을 초과하면 "더 큰" 출력이 발생합니다.

명확한 예

이 동작은 다음 코드로 더 자세히 설명할 수 있습니다.

#include <iostream>

int main()
{
    unsigned int a = 0;
    int b = -1;
    std::cout << std::boolalpha << (b < a) << "\n"; 
}

출력:

false

여기서는 부호 없는 유형(a)과 부호 있는 유형을 직접 비교합니다. (b). 음수 값 b는 부호 없는 큰 정수로 승격되며, 이는 값이 0인 부호 없는 a보다 큰 것으로 정당하게 간주됩니다.

결론

유형 차이와 암시적 승격 규칙을 이해하는 것은 C에서 부호 있는 값과 부호 없는 값으로 작업하는 데 중요합니다. 다양한 유형의 정수를 비교할 때 승격되는 방식과 결과 비교가 의미가 있는지 여부를 고려하는 것이 중요합니다.

위 내용은 -1을 빈 벡터의 크기와 비교하면 C에서 '더 큰' 결과가 나오는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.