2つのunsignedintを減算し、その結果をsigned int(またはリテラル)と比較しようとしています。unsigned int
タイプを使用する場合、動作は期待どおりです。uint16_t
(from )型を使用する場合stdint.h
、動作は私が期待するものではありません。比較はgcc4.5を使用して行われました。
次のコードが与えられます:
unsigned int a;
unsigned int b;
a = 5;
b = 20;
printf("%u\n", (a-b) < 10);
出力は0で、これは私が期待したものです。aとbはどちらも符号なしであり、bはaより大きいため、結果は10より大きい大きな符号なしの数値になります。aとbをuint16_tと入力すると、次のようになります。
uint16_t a;
uint16_t b;
a = 5;
b = 20;
printf("%u\n", (a-b) < 10);
出力は1です。これはなぜですか?2つのuint16_tタイプ間の減算の結果は、gccのintに格納されていますか?をに変更する10
と10U
、出力は再び0になります。これは、これをサポートしているようです(減算結果がintとして格納され、符号なしintと比較される場合、減算結果は符号なしintに変換されます)。