符号付きおよび符号なし二項演算子のプロモーション ルール
次のコード スニペットを検討してください:
// Snippet 1 int max = std::numeric_limits::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) のオペランドが結果の型として選択されます。
これスニペット 1 では結果が unsigned int (2147483648) であり、スニペット 2 では結果が int (-1) である理由を説明します。符号付きオペランド (neg) は暗黙的に unsigned int に変換され、後者の場合は値が未定義になります。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3