A Aldeia Numaboa ancestral ainda está disponível para visitação. É a versão mais antiga da Aldeia que eu não quis simplesmente descartar depois de mais de 10 milhões de pageviews. Como diz a Sirley, nossa cozinheira e filósofa de plantão: "Misericórdia, ai que dó!"

Se você tiver curiosidade, o endereço é numaboa.net.br.

Leia mais...

Informática Numaboa - Tutoriais e Programação

Números finitos

Qui

16

Abr

2009


11:23

(15 votos, média 3.73 de 5) 


Iniciante

Fora do mundo dos computadores considera-se que os números são infinitos. Sempre é possível somar mais um ou adicionar alguns zeros fazendo com que o número não pare de crescer.

Para um computador os números são essencialmente diferentes por que o tamanho dos blocos de dados utilizados É FINITO. Por exemplo, um byte não consegue guardar um número maior do que 255. Se, numa instrução de byte, for adicionado 1 a 255, a soma retorna zero. Na prática, ocorrendo esta situação, a instrução faz com que a flag de carry (ou flag de transposição) seja setada para 1 para mostrar que o novo número é grande demais para o tamanho de dados que foi utilizado. Flag significa bandeira e as bandeiras são "levantadas" quando recebem o valor 1 para dar algum tipo de aviso. Fica mais fácil entender quando se observa os bits:

Flag de CarryBinárioDecimal
1111 1111255
0000 000011
10000 00000

Números com sinal

Como o tamanho dos dados é finito, pode-se considerar os dados como tendo dois valores simultâneos, um positivo e outro negativo.

Explico. Quando somamos dois números decimais, frequentemente colocamos um "vai-um" na próxima coluna, assim:

 11
  95
+ 58
-----
 153

A soma de dois números hexadecimais não é muito diferente. Somar 3 com F nos dá 2, com um "vai-um" para a próxima coluna:

Soma decimal          Soma hexadecimal
                             1
     3                        3
  + 15                      + F
  -----                     ----
    18                       12

Agora veja o que acontece quando somamos 5 com FF:

Soma decimal          Soma hexadecimal          Soma binária
    1                       11                  1 1111 111
     5                       05                   0000 0101
 + 255                     + FF                 + 1111 1111
  -----                    -----                ------------
   260                      104                 1 0000 0100

Os "carries" (vai-um) sucessivos se movem para as posições à esquerda. Se ignorarmos o último 1, porque "estourou" o tamanho do byte, obtemos a resposta 4. Isto significa que FF (255 decimal) se comportou como -1 (5-1=4), portanto, como um número com sinal. Se considerarmos FF como um número sem sinal, o resultado é um erro de overflow porque o byte não consegue guardar o valor hexa 104. O resultado só poderia ser guardado se estivéssemos trabalhando com um bloco de dados word, de 16 bits, ou maior.

Se o número é ou não negativo depende do bit mais significativo do bloco de dados (o bit mais à esquerda), que é conhecido como o "bit de sinal". Se os dados estiverem com o bit de sinal setado, então o número é um número negativo com sinal. Se o bit de sinal estiver zerado, então é um número positivo com sinal. Portanto, é fácil reconhecer um número com sinal.

Se trabalharmos com words de 16 bits podemos obter valores com números sem sinal que vão de 0 a 65535 (ou de 0000 a FFFF em hexa). Se trabalharmos com números com sinal, metade dos valores serão positivos e a outra metade serão valores negativos. Observe o bit de sinal dos blocos:

HexaBinário
Positivos00000000 0000 0000 0000
......
7FFF0111 1111 1111 1111
Negativos80001000 0000 0000 0000
......
FFFF1111 1111 1111 1111

Em todas as formas binárias dos números positivos de 16 bits, o bit de sinal (bit 15) é sempre zero. Para todos os números negativos o bit de sinal é sempre 1. O mesmo raciocínio serve para valores armazenados em blocos de 32 bits, onde o bit de sinal é o 31. Se estiver setado, o valor é negativo; se estiver zerado, o valor é positivo. Se considerarmos apenas os inteiros positivos sem sinal o valor varia de 0 a 4.294.967.295.

Complemento de dois

Os números negativos acima descritos são conhecidos como Complemento de Dois dos números positivos. Diz-se "de dois" porque a conversão é feita em dois passos. O primeiro deles é achar o complemento. O segundo é adicionar 1 ao complemento encontrado.

Para obter o complemento de um número, tomamos sua forma binária e invertemos todos os bits. Por exemplo:

DecimalHexaBinário ComplementoHexaDecimal
240F01111 00000000 1111 0F15
764C0100 11001011 0011 B3179

O segundo passo é adicionar 1 ao resultado do complemento:

Complemento de dois de F0          Complemento de dois de 4C
    0000 1111   (0F)                   1011 0011   (B3)
  +         1   (01)                 +         1   (01)
  -----------                        -----------
    0001 0000   (10)                   1011 0100   (B4)

Fundiu a cabeça? Não se procupe, com o tempo a coisa fica bem mais fácil. Não se deixe intimidar por tão pouco! Você sempre pode voltar e dar uma revisada wink

опционы mfx купить кастрюлюооо полигон александр лобановскийпосольство украины в австрииvsemsmart политик лобановский

Informações adicionais