ホームページ >バックエンド開発 >C++ >C で `vector.size() - 1` が -1 を返さないのはなぜですか?

C で `vector.size() - 1` が -1 を返さないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-02 19:21:11281ブラウズ

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
}

Why is the Second Output Not -1?

The最初の cout ステートメントは、ベクトルが空であることを示す 0 を正しく出力します。しかし、驚くべきことに、2 番目のステートメントは、予想される -1 ではなく、非常に大きな正の数を出力します。これは、vector::size() が size_t 型の符号なし整数を返すために発生します。名前が示すように、符号なし整数は負の数を表すことができません。

したがって、size_t 値がそれ自体から減算されると、基本的にその型で表現可能な最大値にラップアラウンドされます。この場合、size_t は通常 64 ビット整数であるため、保持できる最大値は 18446744073709551615 です。この値は、2 番目の cout ステートメントの出力として出力されます。

実行中に何が起こるか2 番目の cout?

次のシーケンス計算では 2 番目の cout の背後にある動作を説明します。

  1. value.size() は 0、size_t 型の符号なし整数を返します。
  2. value.size() - 1 は 0 - 1 を計算します。 、結果は 18446744073709551615 (表現可能な最大数) size_t).
  3. cout は、この最大値を 18446744073709551615 として出力します。

以上がC で `vector.size() - 1` が -1 を返さないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。