ホームページ >バックエンド開発 >C++ >C で負の整数と符号なし整数を比較すると予期しない結果が生じるのはなぜですか?

C で負の整数と符号なし整数を比較すると予期しない結果が生じるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-08 04:34:10624ブラウズ

Why Does Comparing a Negative Integer to an Unsigned Integer in C   Yield Unexpected Results?

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

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