Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Introdução à Python - Aula 3, Slides de Programação Funcional

Aula de python numero 3 ufmg, resuminho de um livro

Tipologia: Slides

2019

Compartilhado em 22/09/2019

usuário desconhecido
usuário desconhecido 🇧🇷

1 / 18

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Universidade Federal de Minas Gerais
Departamento de Ciência da Computação
Programação de Computadores
Representação binária de números naturais e reais
Prof. José de Siqueira
2019/1
1 / 18
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12

Pré-visualização parcial do texto

Baixe Introdução à Python - Aula 3 e outras Slides em PDF para Programação Funcional, somente na Docsity!

Universidade Federal de Minas Gerais

Departamento de Ciência da Computação

Programação de Computadores

Representação binária de números naturais e reais

Prof. José de Siqueira

Números naturais na representação binária

Como transformar um número binário em número decimal: 0 = 0 1 = 1 10 = 1 · 21 + 0 · 20 = 2 11 = 1 · 21 + 1 · 20 = 3 100 = 1 · 22 + 0 · 21 + 0 · 20 = 4 + 0 + 0 = 4 101 = 1 · 22 + 0 · 21 + 1 · 20 = 4 + 0 + 1 = 5 110 = 1 · 22 + 1 · 21 + 0 · 20 = 4 + 2 + 0 = 6 ... 1010 = 1 · 23 + 0 · 22 + 1 · 21 + 0 · 20 = 8 + 2 = 10 110111 = 1 · 25 + 1 · 24 + 0 · 23 + 1 · 22 + 1 · 21 + 1 · 20 Notação rápida: 1 1 0 1 1 1 32 16 8 4 2 1 32 16 0 4 2 1 55

A representação hexadecimal

Na representação hexadecimal, 4 bits (por que 4 bits?) são combinados em um símbolo: decimal binário hexadecimal decimal binário hexadecimal 0 0000 0x0 8 1000 0x 1 0001 0x1 9 1001 0x 2 0010 0x2 10 1010 0xa 3 0011 0x3 11 1011 0xb 4 0100 0x4 12 1100 0xc 5 0101 0x5 13 1101 0xd 6 0110 0x6 14 1110 0xe 7 0111 0x7 15 1111 0xf

2

d

4

e

a

3

= 0 x 2 d 4 ea 3

Como somar no sistema binário

a : 0 + 0 = 0 e : vai 1 + 0 + 0 = 1 b : 0 + 1 = 1 f : vai 1 + 0 + 1 = 0, vai 1 c : 1 + 0 = 1 g : vai 1 + 1 + 0 = 0, vai 1 d : 1 + 1 = 0, vai 1 h : vai 1 + 1 + 1 = 1, vai 1 Exemplo: 1 1 1 1 1 1 1 1 vai 1 1 0 1 1 0 1 0 1 0 0 x

  • (^1 1 0 0 0 1 1 1 1 0 1) y 1 0 0 1 0 0 0 1 0 0 0 1 x + y e f d e g g f h f d a b

Como subtrair no sistema binário (2)

Como reduzir subtração a uma adição no sistema binário usando o complemento de 1 do número. Suponha que queremos subtrair 1101110 de 100110: 1 1 0 1 1 1 0 − (^1 0 0 1 1 ) 1 0 0 1 0 0 0 Então, primeiro temos que calcular o complemento de 1 do subtraendo. Para isso, invertemos cada um dos bits do número binário: 1 0 0 1 1 0 0 1 1 0 0 1 Somamos 1 ao resultado obtido da inversão de bits para obter o complemento de 1 do subtraendo: Vai 1: 1 0 0 0 0 0 1

  • 0 1 1 0 0 1 0 1 1 0 1 0

Como subtrair no sistema binário (3)

Agora, a subtração torna-se uma adição com o complemento de 1 do subtraendo:

1101110 − 100110 = 101110 + 1000000 − 100110 = 101110 + 000001 + 111111 − 100110 = 101110 + 000001 + 011001 Ou seja, se a > b temos que

a − b = a − 2 p+^1 + 1 + complemento de 1 de b,

onde p é o número de bits de b.

Números reais na representação binária

Exemplos: 1 1010 = 1 · 23 + 0 · 22 + 1 · 21 + 0 · 20 = 8 + 2 = 10 2 0,1 = 1 · 2 −^1 = 1 / 2 3 0,01 = 1 · 2 −^2 = 1 / 4 4 0,11 = 1 · 2 −^1 + 1 · 2 −^2 = 3 / 4 Mas como representar reais na representação binária? Como o número de bits é limitado a 32 ou 64, é claro que só um pequeno subconjunto finito de reais pode ser representado. Mas é preciso representá-los de forma a levar em conta não só o sinal, mas o máximo de reais com os bits disponíveis.

Representação em ponto flutuante (1)

A representação de números em ponto flutuante é a seguinte: ±número ∗ base±expoente Para representar de maneira padrão qualquer número, uma forma normalizada, isto é, uma forma única, é adotada pelo padrão IEEE 754:

sinal expoente mantissa 1 bit de sinal x bits para o expoente y bits para a mantissa (parte fracionária)

onde: para precisão simples (32 bits): x = 8 e y = 23; para precisão dupla (64 bits): x = 11 e y = 52.

Representação em ponto flutuante (2)

2 A mantissa é armazenada no sentido da esquerda para a direita. Esta mantissa é armazenada na forma normalizada, de forma que o primeiro bit em 1 ocorra à esquerda da vírgula. Este bit em 1 não é armazenado, ficando subentendido. Exemplo de normalização da mantissa para precisão simples: Mantissa 0, 812510 : 0, 11012 = 1 , 1012 ∗ 2 −^1 Mantissa 5, 1010 : 101, 000112 = 1 , 01000112 ∗ 22 3 Os dígitos na mantissa são representados por m 1 , m 2 , m 3 ,... my , onde m 1 é o primeiro dígito mais à esquerda e my o mais à direita. Assim, o valor do número é, então, dado por: (− 1 )sinal^ ∗ ( 1 + (m 1 ∗ 2 −^1 ) + (m 2 ∗ 2 −^2 ) + (m 3 ∗ 2 −^3 ) +...

... + (my ∗ 2 −y^ )) ∗ 2 (expoente−PESO) ou, de forma genérica (na precisão simples, com PESO = 127):

(− 1 )sinal^ ∗ ( 1 + mantissa) ∗ 2 (expoente−^127 )

Representação em ponto flutuante (3)

Exemplo: Mostremos a representação binária do número − 0 , 7510 nas precisões simples e dupla no padrão IEEE 754. -0, 75 pode ser representado como -3/4 ou -3/ 22. Em binário corresponde a: -11 2 / 1002 ou -0, 112. Em notação científica normalizada na base 2: -1, 12 ∗ 2 −^1. Como a representação genérica de um número em ponto flutuante (em precisão simples) é

(− 1 )sinal^ ∗ ( 1 + mantissa) ∗ 2 (expoente−^127 )

o valor com que a base deve ser elevada deve ser - Portanto, o expoente em questão é 126, para que (126-127) resulte em -1. Como a mantissa normalizada é -1, 12 , o valor binário final é (− 1 )^1 ∗ ( 1 + 0 , 10000000000000000000000 ) ∗ 2126 −^127.

Exercícios

Nos exercícios que pedirem que você forneça números, você os fornecerá a partir do seu número de matrícula, da seguinte forma: se o exercício pedir um número de 5 algarismos, você escolherá 5 algarismos de qualquer sequência, do meio ou do fim, do seu número de matrícula; se pedir um número de 1 ou 2 algarismos, você escolherá o último ou os 2 últimos algarismos do seu número de matrícula. Os veteranos inverterão seu número de matrícula. 1 Na transformação de números decimais inteiros para binário, utilizamos a divisão por 2 para encontrar o resto da divisão e utilizá-lo na transformação. Na transformação de números decimais fracionários para binário, fazemos a operação inversa por 2. Escolha 10 números (10 sequências diferentes do seu número de matrícula) e crie 10 números fracionários estritamente menores que 1, com 4 algarismos. Transforme-os em binário.

Exercícios

2 Explique os seguintes resultados obtidos com Python:

0.1**

1 + .1234 - 1

3 Dê mais 3 exemplos de discrepância de resultados em operações simples com divisão e multiplicação de reais em Python. 4 Encontre a representação binária, em precisão simples, de 1.1, 2.2 e 3.3. 5 Faça 3 somas e 3 subtrações de binários a partir de 6 números decimais diferentes com 3 algarismos cada.