ホームページ > バックエンド開発 > C++ > C で空のベクトルのサイズから 1 を引くと、-1 ではなく大きな正の数が得られるのはなぜですか?

C で空のベクトルのサイズから 1 を引くと、-1 ではなく大きな正の数が得られるのはなぜですか?

Patricia Arquette
リリース: 2024-12-10 19:35:15
オリジナル
386 人が閲覧しました

Why Does Subtracting 1 from an Empty Vector's Size in C   Result in a Large Positive Number Instead of -1?

C の空のベクトルとのベクトル サイズの不一致

次のコードを考えてみましょう:

#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
}
ログイン後にコピー

コードは 0 を出力します。最初の cout は、予想どおり空のベクトルを示しています。ただし、2 番目の cout では大きな正の数 (18446744073709551615) が出力されます。直感的に予想されるように、なぜ -1 ではないのでしょうか?

符号なし型について

この動作を理解するには、ベクトル サイズの型を考慮する必要があります。関数。 Vector::size() は、符号なしデータ型である size_t 値を返します。符号なしデータ型は正の数と 0 のみを表現できます。これらの型では負の数を表現できません。

空のベクトルのサイズから 1 を減算すると、期待どおり -1 の値が得られます。ただし、size_t は符号なしであるため、-1 値は、このデータ型が表現できる最大の正の値 (この場合は 18446744073709551615) にオーバーフローします。

したがって、2 番目の cout ステートメントは、このオーバーフローの結果を表示するのではなく、このオーバーフローの結果を表示します。予想される -1 値よりも大きくなっています。

以上がC で空のベクトルのサイズから 1 を引くと、-1 ではなく大きな正の数が得られるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート