鉴于此代码:
#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
是 typeint
,所以它不会转换为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 字节)