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

436
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 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