¿La conversión de tipos implícita cambia el tamaño de la variable?

por ejemplo,

#include  int main (void) { int x = 5; double y = 6; int z = x+y; printf("size of z = %d bytes",sizeof(z)); return 0; } 

La salida es de 4 bytes, ¿por qué no se convierte a doble y toma 8 bytes de memoria como doble.

Lee los comentarios que describen el comportamiento de tu código:

 #include  int main (void) { int x = 5; double y = 6; int z = x+y; // 5 (int, 4 bytes) + 6 (double, 8 bytes) // converting `int` to `double` when adding them () // 5.0 (double, 8 bytes) + 6.0 (double, 8 bytes) // 11.0 (double, 8 bytes) // But! `z` is of type `int`, so it will not convert to `double` // Then 11.0 converts to 11 because `z`... is of type `int`! /// read "Double-precision floating-point format" and you'll see why. // So, z = 11 (`z` is of type `int`, so it's size is *4* bytes ) // Here is your 4 bytes instead of 8! ;) printf("size of z = %d bytes",sizeof(z)); return 0; 

}

No, sizeof z siempre será sizeof(int)

Cuando tu lo hagas:

 int z = x+y; 

El valor de x se convertirá en double ya que y es doble, pero esto no cambiará x . Y el resultado de x+y (tipo double ) se convertirá a int y se asignará a z .

Has definido z para que sea entero. Al hacer “x + y”, la adición ocurre en el tamaño doble, pero al asignarla realiza una conversión implícita y trunca el resultado para que se ajuste al tamaño de z.

Ya que declaraste que z es int será int . Y cada conversión posible será de cualquier tipo a int:

  int z = whatever (legal) formula you put here; sizeof(z); /* <- 4 */ 

por el contrario, el valor temporal de x + y es doble, que finalmente se convierte a int

  int x = 5; double y = 6; int z = x+y; /* x + y = 11.0 since y = 6.0; which is converted to 11*/ 

Tu salida es 4 porque estás declarando int z . z siempre será de tipo int .

Incluso si la expresión x+y es de tipo double porque y es double , esta expresión se convertirá implícitamente en int porque se intenta asignar int a e int .

Revisa este código:

 #include  int main() { int x = 4; double y = 5; int z = x+y; printf( "%d %d \n", sizeof(z), sizeof( x + y ) ); return 0; } 

La salida será 4 8 porque z es de tipo int y la expresión x+y de tipo double . Ejemplo