web-dev-qa-db-ja.com

「この10進定数はISOC90でのみ符号なしです」という警告を取り除くことはできません

ハッシュテーブル実装のハッシュアルゴリズムとしてFNVハッシュを使用していますが、次の行の質問タイトルに警告が表示されます。

unsigned hash = 2166136261;

私がこれを行うとき、なぜこれが起こっているのか理解できません:

printf("%u\n", UINT_MAX);
printf("2166136261\n");

私はこれを得る:

4294967295
2166136261

これは私のマシンの制限を下回っているようです...

警告が表示されるのはなぜですか?それを取り除くためのオプションは何ですか?

29
rfgamaral
unsigned hash = 2166136261u; // note the u.

これが符号なしの番号であることを示すには、接尾辞uが必要です。 uサフィックスがないと、符号付き数値になります。以来

2166136261 > 2³¹ - 1 = INT_MAX,

この整数リテラルには問題があります。

42
kennytm