Informática Numaboa - Tutoriais e Programação
Números finitos
Qui 16 Abr 2009 11:23 |
- Detalhes
- Categoria: Assembly Numaboa (antigo oiciliS)
- Atualização: Quinta, 16 Abril 2009 13:28
- Autor: vovó Vicki
- Acessos: 12952
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 Carry | Binário | Decimal |
---|---|---|
1111 1111 | 255 | |
0000 00001 | 1 | |
1 | 0000 0000 | 0 |
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:
Hexa | Binário | |
---|---|---|
Positivos | 0000 | 0000 0000 0000 0000 |
... | ... | |
7FFF | 0111 1111 1111 1111 | |
Negativos | 8000 | 1000 0000 0000 0000 |
... | ... | |
FFFF | 1111 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:
Decimal | Hexa | Binário | Complemento | Hexa | Decimal |
---|---|---|---|---|---|
240 | F0 | 1111 0000 | 0000 1111 | 0F | 15 |
76 | 4C | 0100 1100 | 1011 0011 | B3 | 179 |
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