ホームページ >バックエンド開発 >C++ >C で -1 と空のベクトルのサイズを比較すると「大きい」という結果になるのはなぜですか?

C で -1 と空のベクトルのサイズを比較すると「大きい」という結果になるのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 22:42:14778ブラウズ

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

ベクトルのサイズ 0 と -1 を比較すると「より大きい」結果が得られる理由

パズル

C では、次のコード スニペットにより、予期せぬ出力"より優れた":

#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

謎の解明

この直感に反する動作の背後にある理由は、比較される値間の型の違いにあります。 a.size() は、ベクトルの非負のサイズを表す符号なし整数を返します。一方、b は符号付き整数で、負の値 -1 を保持します。

これら 2 つの値を比較するとき、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 で符号付き値と符号なし値を操作する場合に重要です。異なる型の整数を比較する場合、整数が昇格される方法と、結果の比較が意味があるかどうかを考慮することが重要です。

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

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