添加int和double的逻辑是正确的吗?

Abh*_*hek 3 c logic type-conversion

鉴于此代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

要么

  • 5(int,4字节)+ 6(双,8字节)
  • 转换doubleint添加它们时()隐式转换
  • 5(int,4 bytes)+ 6(int,4 bytes)
  • 11(int,4字节)

yul*_*ian 5

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

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

通常的算术转换