PARTE I|I: ARITMÉTICA
COMPUTACIONAL
ARQUITETURA DE COMPUTADORES
Introdução
Como representar números em memória?
Como representar números negativos e de ponto flutuante?
Como o computador processa esses dados para realizar cálculos?
Conversão decimal-binário
Toda representação em computadores deve ser binária
Para converter um número decimal para binário, basta fazer divisões sucessivas por 2 e os restos das divisões irão formar o número binário
Exemplo
23dez
Exemplo
23dez 23 11 (1) - 22 2Exemplo
23dez 23 (1) - 22 11 2 2 5 - 10 (1)Exemplo
23dez 23 (1) - 22 11 2 2 5 - 10 (1) - 4 22 (1)Exemplo
23dez 23 (1) - 22 11 2 2 5 - 10 (1) - 4 22 (1) - 2 21 (0)Exemplo
23dez 23 (1) - 22 11 2 2 5 - 10 (1) - 4 22 (1) - 2 (1)2 (0)Exemplo
23dez 23 (1) - 22 11 2 2 5 - 10 (1) - 4 22 (1) - 2 (1)2 (0) 10111doisConversão binário-decimal
Para converter um número binário para decimal, basta somar todos os produtos entre o dígito binário e 2n, sendo n a posição desse dígito
A potência inicia em 0 no dígito menos significativo e acrescenta 1 à potência a cada novo dígito binário
Exemplo
Exemplo
10111dois
Exemplo
10111dois
1x24 + 0x23 + 1x22 + 1x21 + 1x20
Menos significativo Mais significativo
Exemplo
10111dois
1x24 + 0x23 + 1x22 + 1x21 + 1x20
Exemplo
10111dois
1x24 + 0x23 + 1x22 + 1x21 + 1x20
16 + 0 + 4 + 2 + 1 23dez
Exercício
Converta os números abaixo para a base solicitada A. 13dez → Xdois B. 71dez → Xdois C. 99dez → Xdois D. 101011101dois → Xdez E. 111010111dois → Xdez F. 1010101011dois → Xdez
Exercício
Converta os números abaixo para a base solicitada A. 13dez → 1101dois B. 71dez → 1000111dois C. 99dez → 1100011dois D. 101011101dois → 349dez E. 111010111dez → 471dez F. 1010101011dez → 683dez
Representando caracteres
Computadores armazenam informações em binário, como armazenar informação de caracteres utilizando este formato?
Programas de computadores utilizam tabelas que convertem caracteres em números
Representar um caracter com 1 byte (8 bits). Possibilidade de representar 256 caracteres
Representando números
Primeiro computadores representavam números através de caracteres
Representação de 1 milhão em caracteres: 1000000 (quantos bytes?)
Representação de 1 milhão em binário:
Representando números
Primeiro computadores representavam números através de caracteres
Representação de 1 milhão em caracteres: 1000000 —> 7 bytes = 56 bits
Representação de 1 milhão em binário:
Representando números
Como fazer operações com caracteres?
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 —————————
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 01 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 001 1 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 0001 1 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 10001 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 1010001 1
Soma
Regras básicas para adição de binários
0 + 0 = 0 0 + 1 = 1 1 + 0 = 1 1 + 1 = 0 (Carry = 1) 100110 + 101011 ————————— 1010001
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101110 - 100011 —————————
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101110 - 100011 —————————
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101110 - 100011 ————————— 1
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101100 - 100011 ————————— 1
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101100 - 100011 ————————— 11
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101000 - 100011 ————————— 011
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101000 - 100011 ————————— 1011
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101000 - 100011 ————————— 01011
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101000 - 100011 ————————— 001011
Subtração
Regras básicas para subtração de binários
0 - 0 = 0 1 - 1 = 0 1 - 0 = 1 0 - 1 = 1 (Empréstimo de 1) 101110 - 100011 ————————— 001011
Exercícios
Faça as operações em binário abaixo. Em seguida converta os números para binário e valide sua resposta
A. 111010 + 10111 B. 101011 + 11110 C. 101010 - 10100 D. 11000 - 11001
Exercícios
Faça as operações em binário abaixo. Em seguida converta os números para binário e valide sua resposta
A. 111010 + 10111 = 1010001 B. 101011 + 11110 = 1001001 C. 101010 - 10100 = 10110
Representando números
Como representar sinais em memória? Complemento de 1 e de 2
Complemento de 1
Inverte todos os bits, ou seja, onde tem 0 fica 1 e onde tem 1 fica 0
Número positivos permanecem inalterados, não é necessário inverter os bits
Acrescenta-se o bit que representa o sinal: 0 para positivo e 1 para negativo
11010110 = 00101001
-11010110 = 00101001 = 100101001 +11010110 = 011010110
Complemento de 1
Como representar o zero?
Pode ser representado +0 e -0
+0 = 00000000 -0 = 11111111
Complemento de 2
Pretende-se acabar com a dupla representação do zero, como ocorria no complemento de 1
Números positivos continuam com a mesma representação, em números negativos aplica-se a regra do complemento de 1. Em seguida soma 1 ao resultado
É possível fazer a operação de números positivos e negativos sem a necessidade de conversão
Complemento de 2
Passos para converter um número decimal para complemento de 2
1. Converta para binário
2. Aplique o complemento de 1 3. Some 1 ao resultado
Complemento de 2
Passos para converter um número decimal para complemento de 2
1. Converta para binário
Complemento de 2 - Ex.
Converter 23dez para binário em complemento de
2 de 8 bits
Número é positivo?
Sim! Então apenas converte para binário
Complemento de 2 - Ex.
Converter -23dez para binário em complemento de 2 de 8 bits
Número é positivo?
Não! Então opera-se os seguintes passos: 1. Converte para binário
2. Aplica-se o complemento de 1 3. Adiciona 1
-23dez = 00010111dois
00010111 = 11101000
Exercícios
Converta os números binários para complemento de 2 em 8 bits
A. -22 B. -77 C. 71 D. -63
Exercícios
Converta os números binários para complemento de 2 em 8 bits
A. -22 = 11101010 B. -77 = 10110011 C. 71 = 01000111 D. -63 = 11000001
Operações em
complemento de 2
A reserva de um bit para a representação do sinal soluciona a questão de representar números negativos em memória Operações em complemento de 1 4 - 3 = 1 0 00100 + 1 11100 = 1 1000000 4 - 3 = 64 ERRADO!
Operações em
complemento de 2
A reserva de um bit para a representação do sinal soluciona a questão de representar números negativos em memória
Operações em complemento de 2
4 - 3 = 1
0 00100 + 1 11101 = 1 0000001
4 - 3 = 1
Remove o dígito mais significativo: 0000001 CORRETO!
Exercício
Faça as operações em complemento de 2 1. 2 + 7
2. 3 - 5 3. - 4 - 3 4. 3 - 4
Representação de ponto
flutuante
Representação de 32 bits de acordo com o IEEE 754 0 00000000 0000000000000000000000000 Sinal 1 bit Expoente 8 bits Fração 23 bits
Representação de ponto
flutuante
0 00000000 0000000000000000000000000 Sinal 1 bit Expoente 8 bits Fração 23 bits Sinal - 1 bit 0 - positivo 1 - negativoRepresentação de ponto
flutuante
0 00000000 0000000000000000000000000 Sinal 1 bit Expoente 8 bits Fração 23 bits Expoente - 8 bitsAcrescenta 127 e converte para binário
11111111 00000000 0 01111111 Exp = -127 Exp = 0127 255 Exp = 128
Representação de ponto
flutuante
0 00000000 0000000000000000000000000 Sinal 1 bit Expoente 8 bits Fração 23 bits Fração - 23 bitsExemplo 1
Converter 27,76 para binário
Passo 1: Transformar o número em algo com o formato 1,### x 2###
27,76 / 2 = 13,88 (…)
Exemplo 1
Converter 27,76 para binário
Passo 1: Transformar o número em algo com o formato 1,### x 2###
27,76 / 2 = 13,88 13,88 / 2 = 6,94 6,94 / 2 = 3,47 3,47 / 2 = 1,735
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,88 * 2 = 1,76 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,88 * 2 = 1,76 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,88 * 2 = 1,76 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,44 * 2 = 0,88
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,88 * 2 = 1,76 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,44 * 2 = 0,88
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,88 * 2 = 1,76 0,44 * 2 = 1,88
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,88 * 2 = 1,76 0,44 * 2 = 1,88 1
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,88 * 2 = 1,76 0,44 * 2 = 1,88 10
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,88 * 2 = 1,76 0,44 * 2 = 1,88 101
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,88 * 2 = 1,76 0,44 * 2 = 1,88 10111100001010001111011
Exemplo 1
Converter 27,76 para binário
Passo 2: Calcular a mantissa com a parte fracionária do passo 1 até que o resultado seja zero
0,735 * 2 = 1,47 0,47 * 2 = 0,94 0,94 * 2 = 1,88 0,76 * 2 = 1,52 0,52 * 2 = 1,04 0,04 * 2 = 0,08 0,08 * 2 = 0,16 0,16 * 2 = 0,32 0,32 * 2 = 0,64 0,64 * 2 = 1,28 0,28 * 2 = 0,56 0,56 * 2 = 1,12 0,12 * 2 = 0,24 0,24 * 2 = 0,48 0,48 * 2 = 0,96 0,96 * 2 = 1,92 0,92 * 2 = 1,84 0,84 * 2 = 1,68 0,68 * 2 = 1,36 0,36 * 2 = 0,72 0,72 * 2 = 1,44 0,88 * 2 = 1,76 0,44 * 2 = 1,88 1011110000101000111101123 bits
Exemplo 1
Converter 27,76 para binário
Passo 3: Cálculo do expoente. Basta somar o expoente por 127 e fazer a conversão para binário
27,76 = 1,735 x 2
4Exp = 4 + 127 = 131 13110 = 100000112
Exemplo 1
Converter 27,76 para binário
Passo 4: Montar o ponto flutuante em binário Sinal positivo = 0
Exemplo 1
Converter 27,76 para binário
Passo 4: Montar o ponto flutuante em binário Sinal positivo = 0
0 10000011 0000000000000000000000000
Exemplo 1
Converter 27,76 para binário
Passo 4: Montar o ponto flutuante em binário Sinal positivo = 0
0 10000011 10111100001010001111011
Exp = 10000011
Exercício
Converter os números abaixo para ponto flutuante binário de 32 bits na representação do IEEE 754
1. -14,5 2. 25,5
Exercício
Converter os números abaixo para ponto flutuante binário de 32 bits na representação do IEEE 754
1. -14,5 2. 25,5
1 10000010 11010000000000000000000