Positive Unsigned Int との負の比較?
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"; }
このコードは、「-1」が明らかに「0」より小さいにもかかわらず、「Greater」を出力します。 」なぜこのようなことが起こるのでしょうか?
重要なのは、関係するさまざまなデータ型にあります。 a.size() は符号なし整数を返しますが、 b は負の符号付き整数です。これら 2 つの型を比較すると、負の符号付き整数は符号なし整数に変換されます。この結果、大きな符号なしの値が 0 と比較され、明らかに 0 の方が大きいことになります。
これをさらに説明するために、次の例を見てみましょう。
#include <iostream> int main() { std::cout << std::boolalpha; unsigned int a = 0; int b = -1; std::cout << (b < a) << "\n"; // prints "false" }
この場合、結果は予想どおり「偽」です。これは、a と b の両方が符号なし整数に昇格され、「-1」が 0 より大きい大きな符号なし値になるためです。
以上がC で負の整数と符号なし整数を比較すると予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。