Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

410
Vistas
¿Por qué el producto "INT_MAX * INT_MAX" da 1?

Estaba aprendiendo arquitectura de computadoras y decidí experimentar con el desbordamiento de la multiplicación. Se observa un desbordamiento para INT_MAX * INT_MAX , pero no estoy seguro de por qué esto da el producto 1 en C/C++.

 #include <stdio.h> #include <limits.h> int main() { int num = INT_MAX; printf("%0x\n", num); //stdout is 0x7fffffff printf("%d\n", num * num); //stdout is 1 return 0; }
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Nota: su código no es válido. El desbordamiento de int * int es un comportamiento indefinido y no debe escribir dicho código. El resultado será impredecible. Este es un ejemplo de juguete en el que un compilador elige actuar de una manera específica, pero en general, el compilador puede hacer cualquier cosa con su código. Si desea que se defina el desbordamiento firmado, consulte, por ejemplo, ¿El desbordamiento firmado sigue siendo un comportamiento indefinido en gcc cuando se usa -fwrapv? .


Por ejemplo, supongamos que int en su plataforma tiene 32 bits y es complemento a dos . El resultado se calcula y luego se trunca a 32 bits.

 INT_MAX = 0x7fffffff = 2147483647 2147483647 * 2147483647 = 4611686014132420609 4611686014132420609 = 0x3fffffff00000001 32-bits from 0x3fffffff00000001 = 0x00000001 = 1
over 4 years ago · Santiago Trujillo Denunciar

0

En diferentes máquinas, el tamaño del tipo de datos "int" puede ser diferente. Puede ser de 32 bits o de 64 bits, según el equipo que utilice. Los rangos típicos de "int" para programas de 32 bits son de -2^31 (mínimo) a 2^31-1 (máximo). Los rangos típicos de "int" para programas de 64 bits son de -2^63 (mínimo) a 2^63-1 (máximo).

Si su programa es de 32 bits, el resultado es (2^31-1) (2^31-1) = 2^62-2^32+1. Dado que 2^62-2^32 solo se representará en los 32 bits superiores del resultado binario, el resultado de desbordamiento que obtendrá es 1. De lo contrario, si su programa es de 64 bits, entonces (2^63-1) (2^ 63-1) = 2^126-2^64+1 también conducirá al mismo resultado al truncar los 64 bits superiores.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda