aula 18

Somei dois números inteiros positivos e o resultado ficou negativo, por quê?

Talvez já tenha acontecido com você, somar dois números inteiros positivos e o resultado ficar negativo. Você sabe por que isso acontece?

Por padrão, na maioria das arquiteturas modernas uma variável do tipo int ocupa 4 bytes de memória, ou seja, 32 bits (4 * 8 = 32).

Assim, imagine o numero 2147483647.
Este número pode ser armazenado em uma variável do tipo int em uma arquitetura onde um int possui 4 byts.

Traduzindo esse número para binário, temos:
1111111111111111111111111111111

Se você contar, verá que temos uma sequência de 31 dígitos 1.
Talvez você imagina que ainda esteja sobrando 1 dos 32 bits de memória, mas não, não está sobrando.

Quando um número é armazenado na memória, o bit mais significativo (à esquerda) é utilizado para armazenar o sinal do número (0 para positivo e 1 para negativo). Assim, o número 2147483647 é armazeno dessa forma:
01111111111111111111111111111111

Assim, voltando ao nosso número de exemplo, se efetuarmos a seguinte soma:
2147483647 + 1
teremos como resultado: -2147483648

O número 2147483648 em binário é:
10000000000000000000000000000000

Perceba que precisamos dos 32 bits para representar o resultado da soma, sendo necessário um 33º bit para armazenar o sinal.

Aqui ocorre o que chamamos de estouro de memória, ou seja, o resultado gerado é um número que não cabe na memória utilizada para armazenar um número inteiro.

Deixe um comentário

oito − 3 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.