13

より大きい型intを整数定数と比較する場合、正しい比較が確実に実行されるように、定数を左または右に配置する必要がありますか?

int64_t i = some_val;
if (i == -1)

または、次のようにする必要があります。

if (-1 == i)

-1LLどちらの場合も(where int64_tis )との比較と同一でない状況はありますlong longか?

4

1 に答える 1

11

右側に置くか左側に置くかは問題ではありません。演算子は==完全に対称です。

この場合のように、演算子の両方のオペランドに==算術型がある場合、「通常の算術変換」が適用されます (C99 §6.5.9)。この場合、適用されるルールは次のとおりです。

両方のオペランドが符号付き整数型であるか、両方が符号なし整数型である場合、整数変換ランクの小さい型のオペランドは、ランクの大きいオペランドの型に変換されます。(C99 §6.3.1.8)

したがって、-1 は に変換されint64_tます。 -1LL違いはありません。

于 2010-09-21T10:38:28.853 に答える