> 백엔드 개발 > C++ > 왜 C에서 `Vector.size() - 1`이 -1을 반환하지 않습니까?

왜 C에서 `Vector.size() - 1`이 -1을 반환하지 않습니까?

Susan Sarandon
풀어 주다: 2024-12-02 19:21:11
원래의
335명이 탐색했습니다.

Why Doesn't `vector.size() - 1` Return -1 in C  ?

C의 벡터 크기 이상

C에서 벡터 컨테이너의 size() 메서드는 벡터의 요소 수를 반환합니다. 그러나 다음 코드 조각에서 볼 수 있듯이 벡터가 비어 있으면 당황스러운 동작이 발생합니다.

#include <vector>
#include <iostream>

using namespace std;

int main() {
    vector<int> value;

    cout << value.size() << endl;  // Output: 0
    cout << value.size() - 1 << endl;  // Output: 18446744073709551615
}
로그인 후 복사

두 번째 출력이 -1이 아닌 이유는 무엇입니까?

첫 번째 cout 문은 벡터가 비어 있음을 나타내는 0을 올바르게 인쇄합니다. 그러나 두 번째 명령문은 놀랍게도 예상한 -1이 아닌 매우 큰 양수를 출력합니다. 이는 vector::size()가 size_t 유형의 부호 없는 정수를 반환하기 때문에 발생합니다. 이름에서 알 수 있듯이 부호 없는 정수는 음수를 나타낼 수 없습니다.

따라서 size_t 값을 그 자체에서 빼면 기본적으로 해당 유형에 대해 표현할 수 있는 최대 숫자로 래핑됩니다. 이 경우 size_t는 일반적으로 64비트 정수이므로 보유할 수 있는 최대 값은 18446744073709551615입니다. 이 값은 두 번째 cout 문의 출력으로 인쇄됩니다.

두 번째 계산?

다음 계산 순서는 다음과 같습니다. 두 번째 cout의 동작:

  1. value.size()는 size_t 유형의 부호 없는 정수인 0을 반환합니다.
  2. value.size() - 1은 0 - 1을 계산하여 결과적으로 18446744073709551615(표현 가능한 최대 수) size_t).
  3. cout은 이 최대값을 18446744073709551615로 인쇄합니다.

위 내용은 왜 C에서 `Vector.size() - 1`이 -1을 반환하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿