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

时间:2013-08-15 08:52:15

标签: 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;
}

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

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

  • 5(int,4 bytes)+ 6(double,8 bytes)
  • int添加到{{1}}时添加它们()隐式转换
  • 5(int,4 bytes)+ 6(int,4 bytes)
  • 11(int,4 bytes)

3 个答案:

答案 0 :(得分:5)

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

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

Usual Arithmetic Conversion

答案 1 :(得分:4)

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

答案 2 :(得分:1)

sizeof(z)为4,因为sizeof(int)为4 - 您尝试分配给z的内容无关紧要。这与类型转换的完成方式完全不同。