鉴于此代码:
#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
?
int
时将double
转换为z
int
的类型为double
,因此不会转换为z
int
...属于z
类型!
阅读“双精度浮点格式”,你会明白为什么。int
的类型为double
,因此它的大小为 4 字节)或
int
添加到{{1}}时添加它们()隐式转换答案 0 :(得分:5)
以下是取自www.tutorialspoint.com/cprogramming的图片,它将取代我的长答案:
“编译器首先执行整数提升,如果操作数仍然有不同的类型,则它们将转换为以下层次结构中显示最高的类型:”
答案 1 :(得分:4)
第一个。它将转换为double
以执行计算,然后转换回int
以执行分配。
答案 2 :(得分:1)
sizeof(z)
为4,因为sizeof(int)
为4 - 您尝试分配给z
的内容无关紧要。这与类型转换的完成方式完全不同。