Use o botão abaixo para reportar erros ou dar sugestões.

Cálculo Numérico - Versão Python

2.1 Sistema de numeração e mudança de base


Usualmente, utilizamos o sistema de numeração decimal para representar números. Esse é um sistema de numeração posicional onde a posição do dígito indica a potência de 10 que o dígito representa.

Exemplo 2.1.1. O número 293 é decomposto como

293 = 2centenas + 9dezenas + 3unidades = 2 102 + 9 101 + 3 100. (2.1)

O sistema de numeração posicional também pode ser usado com outras bases. Vejamos a seguinte definição.

Definição 2.1.1 (Sistema de numeração de base b). Dado um número natural b > 1 e o conjunto de símbolos {±, 0, 1, 2,,b - 1}1, a sequência de símbolos

dndn-1d1d0,d-1d-2b (2.2)

representa o número positivo

dn bn + d n-1 bn-1 + + d 0 b0 + d -1 b-1 + d -2 b-2 + (2.3)

Para representar números negativos usamos o símbolo - a esquerda do numeral2 .

Observação 2.1.1 (b 10). Para sistemas de numeração com base b 10 é usual utilizar as seguintes notações:

  • No sistema de numeração decimal (b = 10), costumamos representar o número sem os parênteses e o subíndice, ou seja,
    ±dndn-1d1d0,d-1d-2 := ±(dndn-1d1d0,d-1d-2)10. (2.4)
  • Se b > 10, usamos as letras A,B,C, para denotar os algarismos: A = 10, B = 11, C = 12, D = 13, E = 14, F = 15.

Exemplo 2.1.2 (Sistema binário). O sistema de numeração em base dois é chamado de binário e os algarismos binários são conhecidos como bits (do inglês binary digits). Um bit pode assumir dois valores distintos: 0 ou 1. Por exemplo:

x = (1001,101)2 = 1 23 + 0 22 + 0 21 + 1 20 + 1 2-1 + 0 2-2 + 1 2-3 = 8 + 0 + 0 + 1 + 0,5 + 0 + 0,125 = 9,625. (2.5)

Ou seja, (1001,101)2 é igual a 9,625 no sistema decimal.

Em Python podemos converter o número (1001,101)2 para a base decimal computando

>>> 1*2**3 + 0*2**2 + 0*2**1 + 1*2**0 + 1*2**-1 + 0*2**-2 + 1*2**-3  
9.625

Exemplo 2.1.3 (Sistema quaternário). No sistema quaternário a base b é igual a 4 e, portanto, temos o seguinte conjunto de algarismos {0, 1, 2, 3}. Por exemplo:

(301,2)4 = 3 42 + 0 41 + 1 40 + 2 4-1 = 49,5. (2.6)

Verifique no computador!

Exemplo 2.1.4 (Sistema octal). No sistema octal a base é b = 8. Por exemplo:

(1357,24)8 = 1 83 + 3 82 + 5 81 + 7 80 + 2 8-1 + 4 8-2 = 512 + 192 + 40 + 7 + 0,25 + 0,0625 = 751,3125. (2.7)

Verifique no computador!

Exemplo 2.1.5 (Sistema hexadecimal). O sistema de numeração cuja a base é b = 16 é chamado de sistema hexadecimal. Neste, temos o conjunto de algarismos {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,A,B,C,D,E,F}. Convertendo o número (E2AC)16 para a base 10 temos

(E2AC)16 = 14 163 + 2 162 + 10 161 + 12 160 = 57344 + 512 + 160 + 12 = 58028. (2.8)

Verifique no computador!

Observação 2.1.2. Python tem algumas sintaxes para representar números em algumas bases. Por exemplo, temos:

>>> print(0b1001) #bin -> dec  
9  
>>> print(0o157) #oct -> dec  
111  
>>> print(0xbeba) #hex -> dec  
48826

Nos exemplos acima vimos como converter números representados em um sistema de numeração de base b para o sistema decimal. Agora, vamos estudar como fazer o processo inverso. Isto é, dado um número decimal (X)10 queremos escrevê-lo em uma outra base b, isto é, queremos obter a seguinte representação:

(X)10 = (dndn-1d0,d-1)b = dn bn + d n-1 bn-1 + + d 0 b0 + d -1 b-1 + d -2 b-2 + (2.9)

Separando as partes inteira e fracionária de X, isto é, X = Xi + Xf, temos

Xi = dn bn + + d n-1bn-1 + d 1 b1 + d 0 b0 (2.10)

e

Xf = d-1 b1 + d-2 b2 + (2.11)

Nosso objetivo é determinar os algarismos {dn,dn-1,...}.

Primeiramente, vejamos como tratar a parte inteira Xi. Calculando sua divisão de Xi por b, temos:

Xi b = d0 b + d1 + d2 b1 + + d n-1 bn-2 + d n bn-1. (2.12)

Observe que d0 é o resto da divisão de Xi por b, pois d1 + d2 b1 + + d n-1 bn-2 + d n bn-1 é inteiro e d0 b é uma fração com d0 < b. Da mesma forma, o resto da divisão de d1 + d2 b1 + + d n-1 bn-2 + d n bn-1 por b é d1. Ou seja, repetindo este processo encontramos os algarismos d0, d1, d2, , dn.

Vamos, agora, converter a parte fracionária Xf do número decimal X para o sistema de base b. Multiplicando Xf por b, temos

bXf = d-1 + d-2 b + d-3 b2 + (2.13)

Observe que a parte inteira desse produto é d-1 e d-2 b + d-3 b2 + é a parte fracionária. Quando multiplicamos d-2 b + d-3 b2 + por b novamente, encontramos d-2. Repetindo este processo encontramos os demais algarismos.

Exemplo 2.1.6. Vamos converter o número 9,625 para a base binária (b = 2). Primeiramente, decompomos 9,625 na soma de suas partes inteira e fracionária.

9,625 = 9 + 0,625. (2.14)

Conversão da parte inteira. Para converter a parte inteira, fazemos sucessivas divisões por b = 2 obtendo 9 = 4 2 + 1 (2.15) = (2 2 + 0) 2 + 1 (2.16) = 23 + 1. (2.17)

Ou seja, temos que 9 = (1001)2. Em Python, podemos usar os comandos int (truncamento) e a operação % (resto da divisão) para computar esta conversão da seguinte forma

>>> x = 9  
>>> d0 = x%2; x = int(x/2); print("d0 = %d, x = %d" % (d0,x))  
d0 = 1, x = 4  
>>> d1 = x%2; x = int(x/2); print("d1 = %d, x = %d" % (d1,x))  
d1 = 0, x = 2  
>>> d2 = x%2; x = int(x/2); print("d2 = %d, x = %d" % (d2,x))  
d2 = 0, x = 1  
>>> d3 = x%2; x = int(x/2); print("d3 = %d, x = %d" % (d3,x))  
d3 = 1, x = 0

Conversão da parte fracionária. Para converter a parte fracionária, fazemos sucessivas multiplicações por b = 2 obtendo 0,625 = 1,25 2-1 = 1 2-1 + 0,25 2-1 (2.18) = 1 2-1 + (0,5 2-1) 2-1 = 1 2-1 + 0,5 2-2 (2.19) = 1 2-1 + (1 2-1) 2-2 = 1 2-1 + 1 2-3. (2.20)

Ou seja, temos que 0,625 = (0,101)2. Em Python, podemos computar esta conversão da parte fracionária da seguinte forma

>>> x=0.625  
>>> d = int(2*x); x = 2*x - d; print("d = %d, x = %f" % (d,x))  
d = 1, x = 0.250000  
>>> d = int(2*x); x = 2*x - d; print("d = %d, x = %f" % (d,x))  
d = 0, x = 0.500000  
>>> d = int(2*x); x = 2*x - d; print("d = %d, x = %f" % (d,x))  
d = 1, x = 0.000000

Conclusão. Da conversão das partes inteira e fracionária de 9,625, obtemos 9 = (1001)2 e 0,625 = (0,101)2. Logo, concluímos que 9,625 = (1001,101)2.

Observação 2.1.3. Python oferece algumas funções para a conversão de números inteiros em base decimal para uma base dada. Por exemplo, temos:

>>> print(bin(9))  
0b1001  
>>> print(oct(111)) #a saída será "0o157", no Python 3 ou superior  
0157  
>>> print(hex(48826))  
0xbeba

Observação 2.1.4. Uma maneira de converter um número dado em uma base b1 para uma base b2 é fazer em duas partes: primeiro converter o número dado na base b2 para base decimal e depois converter para a base b1.

Exercícios resolvidos


Esta seção carece de exercícios resolvidos. Clique em e inicie a editá-la agora mesmo. Veja outras formas de participar clicando aqui.

ER 2.1.1. Obtenha a representação do número 125,583 ̄ na base 6.

Solução. Decompomos 125,583 ̄ nas suas partes inteira 125 e fracionária 0,583 ̄. Então, convertemos cada parte.

Conversão da parte inteira. Vamos escrever o número 125 na base 6. Para tanto, fazemos sucessivas divisões por 6 como segue:

125 = 20 6 + 5(125 dividido por 6 é igual a 20 e resta 5) = (3 6 + 2) 6 + 5 = 3 62 + 2 6 + 5, (2.21)

logo 125 = (325)6.

Estes cálculos podem ser feitos em Python com o auxílio do operador % e da função int. Com o primeiro calculamos o resto da divisão entre dois números, enquanto que a segunda retorna a parte inteira de um número dado. No nosso exemplo, temos:

>>> q = 125; d0 = (q % 6); print(q,d0)  
>>> q = int(q/6); d1 = (q % 6); print(q,d1)  
>>> q = int(q/6); d2 = (q % 6); print(q,d2)

Verifique!

Conversão da parte fracionária. Para converter 0,583 ̄ para a base 6, fazemos sucessivas multiplicações por 6 como segue:

0,583¯ = 3,5 6-1(0,583¯ multiplicado por 6 é igual a 3,5) = 3 6-1 + 0,5 6-1 = 3 6-1 + (3 6-1) 6-1 = 3 6-1 + 3 6-2, (2.22)

logo 0,583¯ = (0,33)6. Em Python, é possível computar esta conversão de valores fracionários da seguinte maneira:

>>> x = 0.58 + 1/3/100; print("x = {}".format(x))  
x = 0.5833333333333333  
>>> d = int(6*x); x = round(6*x,1) - d; print("d = {}, x = {}".format(d, x))  
d = 3, x = 0.5  
>>> d = int(6*x); x = round(6*x,1) - d; print("d = {}, x = {}".format(d, x))  
d = 3, x = 0.0

ER 2.1.2. Obtenha a representação na base 4 do número (101,01)2.

Solução. Começamos convertendo (101,01)2 para a base decimal:
(1001,101)2 = 1 22 + 1 20 + 1 2-2 = 5,25. (2.23)

Então, convertemos 5,25 para a base 4. Para sua parte inteira, temos

5 = 1 4 + 1 = (11)4. (2.24)

Para sua parte fracionária, temos

0,25 = 1 4-1 = (0,1) 4. (2.25)

Logo, (101,01)2 = (11,1)4. Verifique estas contas no computador!

Exercícios


E 2.1.1. Converta para base decimal cada um dos seguintes números:

a)
(100)2
b)
(100)3
c)
(100)b
d)
(12)5
e)
(AA)16
f)
(7,1)8
g)
(3,12)5

Resposta. a) 4; b) 9; c) b2; d) 7; e) 170; f) 7,125; g) 3,28

E 2.1.2. Escreva os números abaixo na base decimal.

a)
(25,13)8
b)
(101,1)2
c)
(12F,4)16
d)
(11,2)3

Resposta. a) 21,172; b) 5,5; c) 303,25; d) 4,6 ̄.

E 2.1.3. Escreva o número 5,5 em base binária.

Resposta. (101,1)2.

E 2.1.4. Escreva o número 17,109375 em base hexadecimal (b = 16).

Resposta. (11,1C)16.

E 2.1.5. Escreva cada número decimal na base b.

a)
7,6¯ na base b = 5
b)
29,16¯ na base b = 6

Resposta. a) (12,31 ̄)5; b) (45,1)6.

E 2.1.6. Escreva (12.4)8 em base decimal e binária.

Resposta. 10,5; (1010,1)2.

E 2.1.7. Escreva cada número dado para a base b.

a)
(45,1)8 para a base b = 2
b)
(21,2)8 para a base b = 16
c)
(1001,101)2 para a base b = 8
d)
(1001,101)2 para a base b = 16

Resposta. a) (100101,001)2; b) (11,4)16; c) (11,5)8; d) (9,A)16.

E 2.1.8. Quantos algarismos são necessários para representar o número 937163832173947 em base binária? E em base 7? Dica: Qual é o menor e o maior inteiro que pode ser escrito em dada base com N algarismos?

Resposta. 50; 18.

Creative Commons License Este texto é disponibilizado nos termos da licença Creative Commons Atribuição-CompartilhaIgual 3.0 Não Adaptada (CC-BY-SA 3.0). Página gerada em 15/5/2019 às 15:24:50.

Informe erros ou edite você mesmo!