Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

452
Visualizações
Cuando encasillamos el int al doble, ¿se cambia la dirección real donde se almacena el int?

Quiero saber que cuando encasillamos el int al doble, ¿el resultado real donde se almacena int se cambia o aumenta? porque int es de 4 bytes (supongamos) y cuando encasillamos al doble, que es de 8 bytes (suposición), ¿el tamaño también aumenta ahora para almacenar el valor de doble? ¿Y, por favor, tómame con calma si es una pregunta estúpida?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Casting no afecta a la variable y la memoria correspondiente. Es solo una indicación para el compilador de cómo interpretar los bits que residen en la ubicación dada.

En el ejemplo de Marcus:

 int i = 12; double d = (double)i;

d es una nueva variable en una ubicación completamente nueva. El valor original, i , no se ve afectado. Sin embargo, si comienzas a jugar con punteros, debes tener cuidado:

 int i = 12; double *p = &i;

Ahora, si double tiene 8 bytes de ancho, tenga en cuenta que al usar p you/compiler asume que apunta a una ubicación de memoria que tiene 8 bytes de memoria asignados para la variable a la que apunta. Sin embargo, esto no es cierto, porque de hecho apunta a i , que tiene solo 4 bytes de ancho (suponga que int tiene 4 bytes de ancho).

EDITAR

Esta es una edición (relativamente) reciente motivada por la solicitud de aclaración de OP en los comentarios. El OP quiere saber:

¿Qué le sucede a la dirección de memoria de sum cuando se encasilla? Ahora el valor encasillado de sum se almacena en otro lugar de la memoria

y aquí está el código:

 int sum = 17, count = 5; double mean; mean = (double) sum / count;

En realidad, hay mucho en juego en las tres líneas de código anteriores. Sin embargo, lo importante aquí es que la variable sum no se modifica en absoluto. Solo se usa como argumento adicional. En aras de sumar dos variables, solo necesita los valores correspondientes. Antes de agregar, lo más probable es que el compilador copie las dos variables en registros. Debido a que está convirtiendo a un doble, es muy probable que el compilador almacene el valor de la sum en un registro de 64 bits de ancho (suponga que el doble tiene un ancho de 64 bits) y eso es todo. Sin embargo, tenga en cuenta que esto es específico de la implementación y variará de un compilador a otro. No es algo que esté especificado por el estándar C.

En este punto, si desea comprender más, lo mejor es compilar en Assembly e intentar comprenderlo. ¡Espero que esto ayude!

over 4 years ago · Santiago Trujillo Relatório

0

Esa es la misma pregunta que "en a = b + c * d; ¿dónde se almacena el resultado intermedio de c * d ?".

Respuesta simple: en una variable temporal administrada por el compilador. Lo más probable es que sea un registro. El estándar del idioma no define esto, ¿por qué debería hacerlo realmente?

El encasillado es en realidad similar a -b (b negado). Esto también tendría que almacenarse en algún lugar antes de ser utilizado.

Tenga en cuenta que el valor original no se modifica y que la variable receptora debe ser del tipo adecuado de todos modos (esa es una de las razones por las que no puede encasillar la variable receptora).

El compilador realiza implícitamente la conversión de int a doble/flotante, por lo que no hay necesidad de una conversión explícita, y no debe usarse en tales casos, ya que ocultará el problema que surja por cambios posteriores en los tipos.

over 4 years ago · Santiago Trujillo Relatório

0

Quiero saber que cuando encasillamos el int al doble, ¿el resultado real donde se almacena int se cambia o aumenta?

Dado que int y double en C son dos tipos distintos, sí, convertir un int en un doble no puede ocurrir en el mismo lugar donde estaba el int, incluso si estos dos tipos tuvieran el mismo tamaño.

Para ilustrar: si la conversión sobrescribiera la variable original, ¿cuáles serían los efectos de

 int i = 12; double d = (double)i; int i2; i2 = i + i;

¿ser?

EDITAR: @Dani agregó que

El doble puede ocupar la misma dirección si ya no se usa el int.

Sí, los compiladores pueden verificar si se accederá o se podrá acceder a una variable en un momento posterior y pueden realizar operaciones en el lugar si eso ayuda; sin embargo, ese no es el caso aquí:

  1. en general, debe asumir que la dirección será diferente
  2. en este caso, los tipos ni siquiera tienen el mismo tamaño
  3. en mi ejemplo, se accede a i más adelante, y
  4. en realidad, no es probable que sea una buena idea; dependiendo de lo que suceda con el doble después de convertirlo en una CPU moderna, lo más probable es que se escriba en un registro especial dedicado al procesamiento de punto flotante, que no será aquel en el que estaba el int .
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda