gpt4 book ai didi

c++ - c中的类型提升和转换

转载 作者:行者123 更新时间:2023-11-30 16:56:32 26 4
gpt4 key购买 nike

double dVal;
int iVal = -7;
unsigned long ulVal = 1000;
dVal = iVal * ulVal;
printf("iVal * ulVal = %lf\n", dVal);

有人可以逐步解释如何获得 4294960296.000000 吗?

  • 先做什么,将iVal的符号更改为unsigned或promotion在与 ulVal 相乘之前转换为 ulVal 类型?
  • 此外,如果我们将 iVal 和 ulVal 相乘,我们就会超出长类型的范围我们将乘法的值存储到双变量(所以我们有转换再次)。但是,当 double 类型时,我们如何知道要舍入到哪个值0 附近最精确,距离 0 的距离最远相邻数字之间较大?

最佳答案

这真的很简单:

iVal 从 int 提升为 unsigned long。因此,它的值 -7(作为二进制补码)变为正值 0xFFFFFFF9(即 4294967289)(至少在您的特定系统上)。

当乘以 1000 时,会溢出 unsigned long,因此结果不是 4,294,967,289,000 (0x3E7 FFFF E4A8),而是 0xFFFFE4A8 (429960296)。

然后将其转换为 double ,得到最终答案。尾随零是因为 float 的值略高于 429960296,因为它被构造为 printf 四舍五入到 6 位的小数之和。

关于c++ - c中的类型提升和转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914622/

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