3

鉴于此代码:

#include <stdio.h>

int main (void)
{
    int x = 5;
    double y = 6;
    int z = x+y;

    printf("size of z = %d bytes",sizeof(z));
    return 0;
}

哪个逻辑正确地描述了线路上发生的事情 - int z = x+y

  • 5(整数,4 字节)+ 6(双精度,8 字节)
  • 添加它们时转换int为()double
  • 5.0(双精度,8 字节)+ 6.0(双精度,8 字节)
  • 11.0(双倍,8 字节)
  • 但!z是 type int,所以它不会转换为double
  • 然后 11.0 转换为 11 因为z... 是类型int
    阅读“双精度浮点格式”,您就会明白为什么。
  • 所以,z = 11(z是类型int,所以它的大小是4个字节)
  • 这是你的 4 个字节而不是 8 个!;)

或者

  • 5(整数,4 字节)+ 6(双精度,8 字节)
  • 添加它们时转换double为() 隐式转换int
  • 5(整数,4 字节)+ 6(整数,4 字节)
  • 11(整数,4 字节)
4

3 回答 3

5

这是取自www.tutorialspoint.com/cprogramming的图片,它将代替我的长答案:

“编译器首先执行整数提升,如果操作数仍然具有不同的类型,则它们将转换为以下层次结构中出现最高的类型:”

通常的算术转换

于 2013-08-15T08:56:15.840 回答
4

第一个。它将转换为double执行计算,然后转换回int执行分配。

于 2013-08-15T08:54:04.900 回答
1

sizeof(z)是 4 因为sizeof(int)是 4 - 不管你尝试分配什么z。这与类型转换的完成方式完全不同。

于 2013-08-15T08:56:07.887 回答