符号付きおよび符号なしの二項演算子のプロモーション ルール
次のコード スニペットを考えてみましょう:
// Snippet 1 int max = std::numeric_limits<int>::max(); unsigned int one = 1; unsigned int result = max + one;
// Snippet 2 unsigned int us = 42; int neg = -43; int result = us + neg;
このような場合、異なる結果の型を考慮して、 " " 演算子はどのようにして正しい結果の型を決定するのでしょうか。オペランドの符号性?
演算子は、オペランドの型に基づいて型変換ステップを指示する「通常の算術変換」ルールに従います。このルールによると、どちらかのオペランドが次の場合:
int と unsigned int はルール内で交換可能であり、より広い型 (unsigned int) のオペランドが結果として選択されます。 type.
これは、スニペット 1 の結果が unsigned int (2147483648) であり、スニペット 2 の結果が int (-1) である理由を説明しています。符号付きオペランド (neg) は暗黙的に unsigned int に変換され、後者の場合は未定義の値になります。
以上が通常の算術変換では、符号付きオペランドと符号なしオペランドを持つ 2 項 \' \' 演算子の結果の型をどのように決定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。