このトピックは、多くのコンテキストで頻繁に議論されてきました。いくつかの投稿を検索して読んだとき。次の投稿で混乱しました。
以下は元の質問です。
unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;
答えは単に「6.3.1.8 通常の算術変換」のポイント 3、つまり、
それ以外の場合、符号なし整数型のオペランドのランクが他のオペランドの型のランク以上である場合、符号付き整数型のオペランドは符号なし整数型のオペランドの型に変換されます。
ただし、私の理解が正しければ、「通常の算術変換」を検討する前に整数昇格を行う必要があります。
そしてそのためのルールは
int が元の型のすべての値を表すことができる場合、値は int に変換されます。それ以外の場合は、 unsigned int に変換されます。これらの変換規則は積分昇格と呼ばれます
つまり、加算はunsigned intよりもsigned intの型で完了することを意味します。また、 unsigned intの結果に負を代入すると、大きな値への変換が発生します。
私は自分の理解に少し自信がありません。誰かがその投稿について同様の混乱を抱えていますか?
返信やコメントは大歓迎です。よろしくお願いします!
ジェフ