ホームページ >バックエンド開発 >C++ >C で符号付き整数と符号なし整数を比較するときに、-1 が 0 より大きいと判断されるのはなぜですか?

C で符号付き整数と符号なし整数を比較するときに、-1 が 0 より大きいと判断されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-11 02:04:14839ブラウズ

Why Does -1 Compare as Greater Than 0 When Comparing Signed and Unsigned Integers in C  ?

負の符号付き整数と符号なし整数の比較を理解する

提供された C プログラムでは、b を比較するときに出力が「より大きい」ことを確認するのは困惑します。 (-1) と a.size() (0) -1 は算術的に小さいにもかかわらず0. この予期しない動作は、符号付き整数型と符号なし整数型の基本的な違いから発生します。

この場合、a.size() はベクトルのサイズを示す符号なし整数を返します。対照的に、b は符号付き整数です。これら 2 つの値を比較すると、符号付き b は自動的に符号なし型に昇格されます。このプロモーションは、-1 を 0 を超える大きな符号なし値に変換します。

この動作はベクトル サイズに限定されません。次のコード スニペットは、同じ問題を示しています。

#include <iostream>
int main()
{
  std::cout << std::boolalpha;
  unsigned int a = 0;
  int b = -1;
  std::cout << (b < a) << "\n"; 
}

このコードを実行すると、「false」が出力され、符号なし型のコンテキストでは -1 が 0 より大きいと見なされることを示します。

このような混乱を避けるために、符号付き整数と符号なし整数には異なる動作があり、意図する操作を慎重に検討せずに混合すべきではないことを覚えておくことが重要です。

以上がC で符号付き整数と符号なし整数を比較するときに、-1 が 0 より大きいと判断されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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