gpt4 book ai didi

c - 关于 C 中整数提升、转换的问题

转载 作者:行者123 更新时间:2023-12-02 21:34:23 25 4
gpt4 key购买 nike

这个话题在很多场合都得到了广泛的讨论。当我搜索并阅读一些帖子时。我对以下帖子感到困惑。

Signed to unsigned conversion in C - is it always safe?

以下是原问题。

unsigned int u = 1234;
int i = -5678;
unsigned int result = u + i;

答案只是引用“6.3.1.8 常用算术转换”第 3 点,即

Otherwise, if the operand that has unsigned integer type has rank greater or equal to the rank of the type of the other operand, then the operand with signed integer type is converted to the type of the operand with unsigned integer type.

但是,如果我的理解是正确的,整数提升应该考虑“通常的算术转换”之前完成。

其规则是

If an int can represent all values of the original type, the value is converted to an int . Otherwise, it is converted to an unsigned int . These conversion rules are called the integral promotions

所以,这意味着加法是用signed int类型完成的,而不是unsigned int类型。当向 unsigned int 结果分配负值时,会发生向大值的转换。

我对自己的理解有点不自信。有人对该帖子有类似的困惑吗?

欢迎任何回复或评论。提前致谢!

杰夫

最佳答案

unsigned int result = u + i;

我们有一个加法运算符。具有算术类型操作数的加法运算符首先执行通常的算术转换。

通常的算术转换分两步完成:

第一个整数整数提升应用于每个操作数:

  • u 不会提升为 int,因为它是 unsigned int
  • i 已经是 int,无需将其提升为 int

由于操作数实际上具有等于 int 的类型等级,因此不会执行整数提升。

其次,将操作数引入通用类型。常见的类型是unsigned int

  • u 已经是 unsigned int
  • iint 类型,并转换为 unsigned int

在通常的算术转换之后,unsigned int 类型的两个值相加,并将结果分配给 result

关于c - 关于 C 中整数提升、转换的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21725413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com