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 サイトの他の関連記事を参照してください。