Introdução à programação e aos algoritmos

João Araujo Ribeiro · Capítulo 5 de 103

Páginas do PDF

Introdução à programação e aos algoritmos

1.2 Números Binários

EXERCÍCIO 1.1

 

Se a espécie humana tivesse evoluído para ter 8 dedos, como estaríamos

escrevendo os seguintes números?

a) 12

b) 100

c) 1234

 

EXERCÍCIO 1.2

 

E se tivéssemos 12 dedos? Use A e B como símbolos extras para escrever os

números na nova base.

a) 12

b) 100

c) 1234

 

Figura 1.2 0123 na base decimal.

 

1.2 NÚMEROS BINÁRIOS

“Existem 10 tipos de pessoas no mundo, as que entendem binários, e as que não entendem binários.” Autor desconhecido.

 

Agora que já entendemos como funciona a notação posicional para representar números, temos de pensar em como colocar uma base numérica dentro de uma máquina eletrônica, para que esta possa fazer cálculos.

Por sua necessidade de 60 símbolos, a base sexagesimal é muito complexa para ser implementada por um computador. Mas a base decimal tem o mesmo problema. Não é fácil representar a base dez em computadores. Precisaríamos de dez estados de alguma grandeza física para representar cada valor. A maior dificuldade, porém, não está nem na escolha de uma grandeza física com 10 valores diferentes; existem diversas opções que poderiam ser escolhidas. A maior dificuldade está em como diferenciar um valor da grandeza de outro. No caso da base 10, nossas máquinas computacionais teriam de ser capazes de diferenciar dez valores, de forma precisa, para poder fazer suas operações.

Assim, o mais simples é usar a menor base possível, e a mais simples é aquela que necessita de apenas dois símbolos: 0 e 1.

Os valores de zero e um podem ser representados facilmente. Note que neste caso, para nossa máquina computacional diferenciar os números 0 e 1, basta saber diferenciar o fato de algo existir ou não.

Diferentemente do que muitos pensam, o conceito de binário não está em comparar coisas opostas, mas na existência ou não de uma condição. Podemos usar os estados ligado e não ligado, aceso e não aceso, tem corrente e não tem corrente. Qualquer coisa cuja existência ou não existência possa ser detectada pode ser usada para representar números nesta base, a chamada base binária.

Normalmente, associamos o valor 1 à existência da grandeza. Assim, se usarmos a grandeza da corrente elétrica, se houver um fluxo de corrente, o valor associado será 1; se não houver, o valor será 0. Isso é apenas uma convenção. Nada impede de fazermos a associação contrária, ou seja, quando houver corrente será 0 e quando não houver, será 1. Os resultados não se alterariam por esta mudança de convenção. A única regra é que a associação entre a grandeza e o valor 0 e 1 seja sempre a mesma na nossa máquina computacional.

É muito fácil fazer contas na base binária. Vamos de novo usar a

operação da adição, como feito na seção anterior. Como tem apenas dois símbolos, zero mais um “dá” um e um mais um “dá” zero e vai um.

 

A multiplicação também é muito fácil, como podemos ver a

seguir:

 

Um dígito binário é chamado de bit, que vem do inglês “BInary

digiT”.

Obviamente, não podemos nos limitar a apenas um dígito. Assim

como na base decimal usamos mais dígitos para representar números maiores. No mundo da Computação, blocos de 8 bits recebem um nome especial: byte.

 

Fato 1.1 – A palavra byte

A palavra byte foi criada em 1956 por Werner Buchholz enquanto trabalhava no

projeto do supercomputador IBM 7030 Stretch, o primeiro supercomputador

transistorizado. No início, um byte não era necessariamente um grupamento de 8 bits.

Um byte podia ter apenas 1 bit ou mesmo 48 bits. Signi cava apenas um grupo de

dígitos binários. Segundo o criador, a palavra vem de bite, mordida em inglês. O uso do

y, transformando a palavra em byte foi para evitar que a palavra viesse a ser

confundida com bit. Uma opção à palavra byte é a palavra octeto, mas esta última não

obteve o mesmo sucesso que a palavra original, sendo, entretanto, bastante usada

quando se fala de redes de computadores.

 

Quantos números diferentes podemos representar com 8 bits, ou seja, um byte? Façamos as contas. Com 1 bit temos apenas as possibilidades de 0 e 1, assim conseguimos representar 2 números diferentes. Com 2 bits temos as seguintes possibilidades: 00, 01, 10, 11, ou seja, temos 4 possibilidades. Mas o que representam esses números na notação decimal? De acordo com nossa regra de posicionamento (Equação 1.1), cada posição é multiplicada por uma potência da base numérica, no caso da base binária, em potências de 2. Assim temos,

00 = 0 × 21 + 0 × 20 = 0 × 2 + 0 × 1 = 0 + 0 = 0

01 = 0 × 21 + 1 × 20 = 0 × 2 + 1 × 1 = 0 + 1 = 1

10 = 1 × 21 + 0 × 20 = 1 × 2 + 0 × 1 = 2 + 0 = 2

11 = 1 × 21 + 1 × 20 = 1 × 2 + 1 × 1 = 2 + 1 = 3 que nos leva à representação de 4 números distintos, de zero a três. Vemos que a quantidade de números distintos que podemos representar com n bits é dada por

 

em que n é o número de bits que estamos utilizando. E, se usamos apenas números positivos e zero, os números variam entre zero e o maior inteiro positivo com n bits, ou seja

Desse modo, com 2 bits podemos representar 2 = 4 números,

 

que variam entre 0 e 22 – 1 = 3.

Quantos números distintos podemos representar com 8 bits?

Qual o maior número representado? Aplicando as equações 1.2 e 1.3, obtemos 256 e 255, respectivamente.

Com um byte teremos os seguintes valores para cada posição

dos bits:

 

Posição 7 6 5 4 3 2 1 0

 

Valor 128 64 32 16 8 4 2 1

 

Por exemplo, para representar o número 215 na base binária,

temos de escolher os bits que devem ser iguais a 1 e que forneçam como soma de seus valores, de acordo com o seu posicionamento, o valor 215. Começamos com o bit 7, cujo valor é 128, e colocamos em 1. O bit seguinte é o bit 6, de valor 64. Vemos que 128 + 64 = 192, ainda abaixo de 215, então o bit 6 também deve ser igual a 1. Continuamos o processo com o bit 5, de valor 32, e obtemos 192 + 32 = 224. Com o bit 5 ultrapassamos nossa meta de 215, então o bit 5 deve ficar em 0. Tentamos o próximo, o bit 4, de valor 16, que implica 192 + 16 = 208. Assim o bit 4 deve ser igual a 1. O bit 3, faz a soma 208 + 8 = 216, estourando de novo nossa meta, ou seja, o bit 3 deve ser 0. Com o bit 2, temos 208 + 4 = 212, que deve ficar em 1. Utilizamos agora o bit 1, com valor 2, 212 + 2 = 214, e concluímos que o bit 1 será 1. Finalmente, com o bit 0, temos 214 + 1 = 215. Desta forma fechamos nossas contas com o bit 0 igual a 1. Resumindo tudo, temos

Bit 1 1 0 1 0 1 1 1

 

Posição 7 6 5 4 3 2 1 0

 

Valor 128 64 32 16 8 4 2 1

 

A representação de 215 10 na base binária é igual a 110101112.

Uma maneira prática de fazer esta conversão é usar divisões sucessivas por 2 e o resto de cada passo. Com o mesmo 215, faríamos:

 

Usando os restos, de baixo para cima, obtemos o resultado correto.

A conta inversa pode ser feita para descobrir o número da base dez representado por um número binário.

Deste modo, sempre usando um byte, o número na base binária 00110100 = 0 + 0 + 32 + 16 + 0 + 4 + 0 + 0 = 52. A convenção usada é numerar os dígitos binários da direita para a esquerda, começando com zero. Assim, em um byte, o bit menos significativo é o bit 0 e o mais significativo é o bit 7. Generalizando, o bit mais significativo em uma sequência de n bits é o bit de ordem n – 1, ou

seja, o mais à esquerda. A Figura 1.3 apresenta esses bits.

 

Figura 1.3 Bits mais e menos significativos.

 

Se usarmos 4 bits, teremos a tabela de conversão entre binário e

decimal mostrada na Figura 1.4.

 

Figura 1.4 Tabela de conversão entre binário e decimal sem sinal.

 

Os computadores não manipulam a informação bit a bit. Em vez

disso, usam blocos de tamanho fixo de bits, chamados de palavras, ou words, em inglês. Isso vai determinar o tipo de processamento que pode ser feito no computador, ou seja, como o computador irá enxergar a memória e fazer seu processamento. Assim, temos computadores com palavras de 8, 16, 32 e até 64 bits.

 

Fato 1.2 – Por que um byte tem 8 bits?

Aprendemos certas coisas e nem sempre questionamos por que são como são. Um byte

tem 8 bits e achamos que sempre foi assim. Mas a história não é tão simples.

Os primeiros computadores usavam cartões perfurados para a entrada de dados.

Em um cartão IBM de 12 linhas e 80 colunas, cada linha possuía os números de 0 a 9

mais os números 11 e 12. Para representar o número 19, por exemplo, se faz um furo

no 1 da primeira coluna e outro no 9 da segunda. Os números 12 e 11 servem para os

sinais + e –.

Quando as letras passaram a ser necessárias, foi preciso criar mais 26 codi cações

diferentes para o alfabeto inglês. Para escrever as letras era usado um furo na faixa 1 a

9 e depois outro para indicar que se tratava de letra: para as letras A até I usava-se um

furo no 12; letras J até R, um furo no 11 e letras S até Z, um furo no 0 (mas nesse caso

com um furo de 2 até 9). Exceto pelos + e –, não existia nenhum outro símbolo. Mais

tarde foram acrescentados outros símbolos para pontuação, com o auxílio de um

terceiro furo. Nesse ponto estávamos com 10 dígitos, 26 letras do alfabeto e 11 outros

símbolos, totalizando 47 caracteres. Ora, para representar 47 símbolos em binário

precisamos de pelo menos 6 bits. Com 6 bits podemos representar até 64 caracteres.

Parecia que um byte ia ter 6 bits.

Esta era a época do projeto do computador STRETCH da IBM, e Bob Bemer

(1920-2004) tinha acabado de entrar na equipe do projeto. A equipe começou a

pensar no processamento de textos pelo computador, e a simples adição das 26 letras

minúsculas aos 47 caracteres, demandava 73 representações diferentes, número além

da capacidade dos 6 bits.

Foi aí que Bemer propôs que um byte tivesse 8 bits. Algumas pessoas chegaram a

pensar em usar 7 bits, mas, se pensarmos bem, não é uma boa opção. O número 7,

além de ser ímpar, é primo. Assim, Bemer liderou uma equipe que propôs 8 bits para o

byte. Seu mantra na época era “potências de 2 são mágicas”. Interessante saber que o

próprio Bemer não gostava do nome byte; preferia octeto. Além dessa contribuição

histórica à Computação, Bemer também é conhecido como “o pai da codi cação ASCII”

[BSW61].

 

EXERCÍCIO 1.3

 

Quantos números diferentes são possíveis com 10 bits? Quais são o menor e o

maior valor?