这个话题在很多情况下都被大量讨论过。当我搜索并阅读一些帖子时。我被以下帖子弄糊涂了。
以下是原始问题。
unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;
答案只是引用了“6.3.1.8 通常的算术转换”第 3 点,即
否则,如果无符号整数类型的操作数的等级大于或等于另一个操作数类型的等级,则将有符号整数类型的操作数转换为无符号整数类型的操作数的类型。
但是,如果我的理解是正确的,那么应该在考虑“通常的算术转换”之前进行整数提升。
规则是
如果 int 可以表示原始类型的所有值,则该值将转换为 int 。否则,它将转换为 unsigned int 。这些转换规则称为积分促销
因此,这意味着添加是使用有符号 int 类型而不是unsigned int类型完成的。当将负数分配给unsigned int结果时,会发生转换为大值。
我对自己的理解有点不自信。有没有人对那个帖子有类似的困惑?
欢迎任何回复或评论。提前谢谢!
杰夫