C 语言是如何处理算术运算中的数据类型转换的?

示例代码:

int main(void)
{
    int a = 5;
    int b = -2;
    unsigned int c = 5;
    double d = a + b - c - 0.5;
    double e = a + b - 1.0 * c - 0.5;

    printf("d: %g\n", d);
    printf("e: %g\n", e);
    return 0;
}

结果:

d: 4294967293.5
e: -2.5

看上去 c 的取值错了。

阅读 1.9k
1 个回答

unsigned intint相加减的时候,int类型会被转换为unsigned int类型,并且运算的结果也是unsigned int类型。

double d = a + b - c - 0.5 相当于double d = (unsigned int)a + (unsigned int)b - c - 0.5,而unsigned int(-2)4294967294,所以5 + 4294967294 - 5 - 0.54294967293.5

double e = a + b - 1.0 * c - 0.5,因为先算乘除,所以首先(1.0 * c)会被转为double类型,所以5 + -2 - 5.0 - 0.5等于-2.5

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进