1 つが unsigned int32 で、もう 1 つが signed int32 である 2 つの int を比較する方法を理解するのに苦労しています。この単純なプログラムを考えてみましょう:
#include <stdint.h>
int main()
{
uint32_t a1 = UINT32_MAX;
int32_t b1 = (int32_t)a1;
if (a1 == b1)
printf("Equal");
else
printf("Not equal");
return 0;
}
この場合、a1
は符号付き 32 ビット整数の範囲を超えているため、デバッグ中に確認したように、キャストされた後は にb1
等しくなり-1
ます。ただし、これらの値は明らかに同じではありませんが、それでも「等しい」と出力されます。何が原因ですか?