Buscar

Códigos de caracteres e Operações em binário

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

Códigos de caracteres
Introdução
Como um bit pode representar apenas dois símbolos distintos, 0 e 1, deve haver uma unidade maior, formada por um conjunto de bits, para representar números e outros símbolos, como os caracteres e os sinais de pontuação que usamos nas linguagens escritas.
Essa unidade maior, ou grupo de bits, precisa ter bits suficientes para representar todos os símbolos que possam ser usados, inclusive dígitos numéricos, as letras maiúsculas e minúsculas do alfabeto, sinais de pontuação, símbolos matemáticos e assim por diante. 
Além desses símbolos comuns, é preciso haver espaço extra para os comandos que controlam os dispositivos.
Quantidade de símbolos
BITS
SÍMBOLOS
2
4
3
8
4
16
5
32
6
64
7
128
8
256
9
512
10
1024
Sistemas de representação de símbolos
BCD
EBCDIC
ASCII
Unicode
BCD (Binary Coded Decimal – Decimal Codificado em Binário).
Um dos primeiros sistemas completos para representar símbolos com bists
A IBM definiu o BCD para um de seus primeiros computadores. 
Os códigos BCD consistiam em palavras de seis bits, que permitiam um máximo de 64 símbolos possíveis. 
EBCDIC 
A necessidade de representar mais símbolos levou a IBM a desenvolver o sistema EBCDIC. 
EBCDIC é a sigla para Extended Binary Coded Decimal Interchange Code (Código Ampliado de Caracteres Decimais Codificados em Binário para o Intercâmbio de Dados).
EBCDIC é um código de oito bits que define 256 símbolos. 
ASCII
Quando os pequenos computadores começaram a ser desenvolvidos, o ANSI (American National Standards Institute – Instituto Nacional de Padrões Americano), que desenvolvia padrões para inúmeras atividades, entrou em ação para definir padrões para computadores também.
A solução encontrada pela organização ANSI para representar símbolos com bits de dados foi o conjunto de caracteres ASCII, que significa American Standard Code for Information Interchange (Código Padrão Americano para o Intercâmbio de Informações), um código de oito bits.
Uma maneira de ver os códigos ASCII é dar-se conta de que o símbolo associado ao código é outra maneira de descrever oito dígitos binários. 
Por exemplo, o número binário 01101111 que é o decimal 111, é representado no conjunto de caracteres ASCII pela letra minúscula “o”. 
UNICODE
O Unicode Consortium desenvolveu o Padrão Unicode em resposta aos sérios problemas criados por múltiplas codificações de caracteres e uso dessas codificações.
O Padrão Unicode é projetado para ser universal, eficiente, uniforme e não ambíguo.
Um sistema universal de codificação inclui todos os caracteres comumente utilizados; um sistema eficiente de codificação analisa sintaticamente arquivos de texto de maneira fácil; um sistema uniforme de codificação atribui valores fixos a todos os caracteres; e um sistema não ambíguo de codificação representa o mesmo caractere para qualquer valor dado.
O unicode utiliza três formatos de transformação Unicode (UTF – Unicode transformation format): UTF-8, UTF-16 e UTF-32, cada um dos quais pode ser apropriado para uso em diferentes contextos.
O UTF-8 é uma forma de codificação de largura variável mais compacta para texto que envolve principalmente caracteres latinos e pontuação ASCII.
O UTF-16 é a forma padrão de codificação do Padrão Unicode. Ele é uma forma de codificação de largura variável que utiliza unidades de 16 bits de código em vez de bytes. A maioria dos caracteres é representada por uma única unidade de 16 bits.
O UTF-32 é uma forma de codificação de 32 bits. A principal vantagem da forma de codificação de largura fixa é que ele expressa todos os caracteres uniformemente, assim são fáceis de tratar em arrays e em outros usos. 
Os valores de código são combinações de bits que representam caracteres codificados. A notação Unicode para um valor de código é U+yyyy na qual U+ se refere a valores de código Unicode, em oposição a outros valores hexadecimais. O yyyy representa um número de quatro dígitos hexadecimais.
Álgebra Binária
Soma em binário
Regras:
	0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 0 (e "vai 1" para o dígito de ordem superior)
1 + 1 + 1 = 1 (e "vai 1" para o dígito de ordem superior)
Observações:
Soma-se as colunas da direita para a esquerda, tal como uma soma em decimal.
São usadas, em seqüência, da direita para a esquerda, todas as regras acima. 
Para facilitar, indicar na primeira linha o "vai um“.
Exemplo: somar 011100 + 011010 
 Solução:
11-----> "vai um"
011100
011010+
----------
110110
Subtração em binário
Regras:
 0 - 0 = 0
0 - 1 = 1 ("vem um do próximo")
1 - 0 = 1
1 - 1 = 0
Observação:
Como é impossível tirar 1 de zero, o artifício é "pedir emprestado" 1 da casa de ordem superior. Ou seja, na realidade o que se faz é subtrair 1 de 10 e encontramos 1 como resultado, devendo então subtrair 1 do dígito de ordem superior (aquele 1 que se "pediu emprestado"). Vamos lembrar que esse algoritmo é exatamente o mesmo da subtração em decimal a que já estamos acostumados desde o curso primário.
Exemplo: Efetuar 111100 - 011010 
Solução:
 ---02-> "vem um"
 111100
011010-
----------
100010
Obs.: 
1) Lembre-se: subtrai-se as colunas da direita para a esquerda, tal como uma subtração em decimal.
2) No exemplo, são usadas, em seqüência, da direita para a esquerda, todas as regrinhas acima. 
3) Na primeira linha, em vermelho, é indicado o "vem um".
4) Por simplicidade, no exemplo estamos considerando os dois números positivos.
Exercício
Desenvolva as seguintes somas binárias
1010100 + 10101 =
11010 + 111001 =
10011101 + 1001 =
Desenvolva as seguintes subtrações binárias
1000000 – 111 =
1111 – 111 =
1011 – 1010 =
Multiplicação em binário
Regras:
 0 x 0 = 0
0 x 1 = 0
1 x 0 = 0
1 x 1 = 1
Exemplo de multiplicação:
 Multiplicar os números 1011 e 1101.
 
 1 0 1 1 1 1
 * 1 1 0 1 1 3
 1 0 1 1
 0 0 0 0
 1 0 1 1
 + 1 0 1 1
 1 0 0 0 1 1 1 1 14 3
 
 
Uma forma, e a ideal, é fazer a operação semelhante à multiplicação decimal, exceto pelo fato da soma final dos produtos se fazer em binário. 
Divisão em binário
A divisão pode ser feita de maneira idêntica à divisão decimal, exceto pelo fato das multiplicações e subtrações internas ao processo serem feitas em binário.
Exemplo: Dividir 11011 e 101.
 1 1 0 1 1 = 2 7 e 1 0 1 = 5
 
 1 1 0 1 1 1 0 1
 - 1 0 1 1 0 1
 0 0 1 1 1
 - 1 0 1
 0 1 0 
 Resultado: o quociente é 1 0 1 e o resto é 1 0
Exercício
Desenvolva as seguintes multiplicações e divisões binárias
10011 X 1000 =
10110 X 1101 =
110000 /1000
1010001 /1001 =
Artifício computacional
No entanto, a multiplicação em computadores é feita por um artifício: 
para multiplicar um número A por n, basta somar A com A, n vezes. 
Por exemplo, 4 x 3 = 4 + 4 + 4. 
E a divisão também pode ser feita por subtrações sucessivas! 
O que concluímos? 
Que qualquer operação aritmética pode ser realizada em computadores apenas através de somas (diretas ou em complemento).
Exemplo de multiplicação:
 1 0 1 * 1 0 0 = ?
 
 1
 1 1
 1 0 1
 1 1 0 1 100 vezes
 1 1 0 1 (4 vezes) 
 + 1 0 1
 1 0 1 0 0
101(2) = 5(10)
100(2) = 4(10)
Exemplo de subtração:
 1 0 0 0 0 / 1 0 0 0 = ?
 
 1 0 0 0 0
 - 1 0 0 0
0 1 0 0 0 1 vez
 - 1 0 0 0
 0 0 0 0 0 2 vezes
 
 
 O Resultado é 2(10), isto é, 10(2)
Deslocamento de bits
Movimentação de uma casa para direita ou esquerda.
Deslocamento de bits para a esquerda – multiplicação por 2
Deslocamento de bits para a direita – divisão por 2
Rotação (deslocamento cíclico)
Gira os bits para esquerda ou para direita.
Mantém todos os bits da palavra.
Pode ser usado para teste dos bits de uma palavra.
Complemento a Base
A implementação do algoritmo da subtração em computadores é complexa, requerendo vários testes. 
Assim, em computadores a subtração em binário é feita utilizando o "Método do Complemento a Base" que consiste em encontrar o complemento do número em relação à base e depois somar os números.
Complemento a dois
Computadores encontram o complemento a dois de um número através de um algoritmo que pode ser assim descrito:
Se o número é positivo, mantenha o número (o complemento de um número positivo é o próprio número)
Se o número é negativo:
inverta o número negativo ou o subtraendo na subtração (todo 1 vira zero, todo zero vira um)
some 1 ao número em complemento
some as parcelas (na subtração, some o minuendo ao subtraendo)
se a soma em complemento acarretar "vai-um" ao resultado, ignore o transporte final)
Exemplo: Realizar a seguinte operação utilizando complemento a dois: 1101 - 1100 = 0001
inverte o subtraendo 0011
soma 1 0001 +
resultado 0100
mantém o minuendo 1101 +
Soma as parcelas 10001
ignora o “vai-um” 0001
Exercício
Desenvolva as seguintes operações utilizando complemento a dois:
1100110011 – 10101010 =
11001 – 1101 =
101010000 – 1010110 =
Representação de números inteiros
Representação sinal-magnitude
+18 = 00010010
-18 = 10010010
Representação em complemento de um
Representação em complemento de dois
+18 = 00010010
-18 = 11101110 
Representação sinal-magnitude
A magnitude é o valor absoluto que independe de sinal.
A magnitude de um número é representada em binário. 
O sinal é representado por um bit (o bit mais significativo, isto é, o bit mais à esquerda na representação). 
Por convenção, o bit de sinal 0 (zero) significa que o número é positivo e o bit 1 representa que o número é negativo.
O valor dos bits usados para representar a magnitude independe do sinal, isto é, sendo o número positivo ou negativo, a representação binária da magnitude será a mesma, o que varia é apenas o bit de sinal. 
Ex.: 
0011 = +3 
1011 = -3
(011 equivale ao valor absoluto 3)
A representação na base b em sinal e magnitude com n bits (incluindo o bit de sinal) possui bn representações e permite representar bn -1 valores, de vez que há duas representações para o zero.
ARITMÉTICA EM SINAL E MAGNITUDE
Algoritmo da soma
a) verificar o sinal das parcelas
b) se os sinais forem iguais:
-- repetir o sinal
-- somar as magnitudes
c) se os sinais forem diferentes
-- verificar qual parcela tem maior magnitude
-- repetir o sinal da maior magnitude
-- subtrair a menor magnitude da maior magnitude
Algoritmo da subtração
O algoritmo da subtração é o mesmo da soma, sendo feita como se fosse uma soma de dois números que tem os sinais diferentes.
A representação em sinal e magnitude apresenta uma grande desvantagem: 
ela exige um grande número de testes para se realizar uma simples soma de dois números inteiros. 
O algoritmo acima descrito é complicado de ser realizado no computador, o que resulta em baixa eficiência (execução lenta). 
Um outro ponto negativo é termos duas representações para o zero.
Aritmética em complemento de dois
Adição de números na representação em complemento de dois 
1001
+ 0101
1110 = -2
(-7)+(+5) = -2
0011
+ 0100
0111 = 7
(+3)+(+4) = 7
1100
+ 1111
 11011 = -5
(-4)+(-1) = -5
0101
+ 0100
1001= overflow
(+5)+(+4) 
1001
+ 1010
 10011 = overflow
(-7)+(-6)
0010
+ 1001
 1011 = -5
(+2)+(-7) = -5
Para números com n bits podemos representar 2n números positivos e negativos 
Note que 2n – k é o complemento de dois de k.
A detecção de overflow é feita de acordo com a seguinte regra:
Na adição de dois números, ambos positivos ou negativos, ocorrerá overflow somente se o resultado tiver sinal oposto.
REPRESENTAÇÃO DE NÚMEROS REAIS
Os dados numéricos podem ser fracionários (tais como 57,683). 
Como representar essa parte fracionária (após a vírgula que a separa da parte inteira), de forma que permita processamento eficiente e armazenamento com pouco consumo de memória?
Números reais são aqueles com parte fracionária (por exemplo, 57,683). 
Estamos acostumados a representar esses números no formato parte inteira, vírgula (ou ponto), parte fracionária:
Esta representação, embora cômoda para cálculos no papel, não é adequada para processamento no computador.
REPRESENTAÇÃO EM PONTO FLUTUANTE
Consideremos o número 57,683.
Este número pode ser também expresso como 57,683 x 100. 
E também poderia ser expresso com 57683 x 10-3 ou ainda 0,57683 x 102. 
Na realidade, qualquer número - inteiro ou fracionário - pode ser expresso neste formato número x base expoente, em que variamos duas coisas: a posição da vírgula (que delimita a parte fracionária) e a potência à qual elevamos a base. 
Essa representação é denominada representação em ponto flutuante, pois o ponto varia sua posição, modificando, em conseqüência, o valor representado.
REPRESENTAÇÃO NORMALIZADA
Na representação normalizada, o número é preparado movendo a vírgula para a direita ou para a esquerda de forma que o número seja menor que 1, o mais próximo possível de 1, obviamente multiplicado por uma potência da base de forma a manter o valor do número. 
Em geral, isso significa que o primeiro dígito significativo seguirá imediatamente ao ponto (ou vírgula). 
Por exemplo:
57,68310 --> normalizando ==> 0,57683 x 102
0,000462810 --> normalizando ==> 0,4628 x 10-3
0,000010112 --> normalizando ==> 0,1011 x 2-4
 De forma genérica, podemos representar a forma normalizada:
 ± número x base ±expoente 
A parte do número representado dessa forma normalizada (os algarismos significativos), damos o nome de mantissa.e portanto podemos representar:
± 0,M x B ± e onde M é a mantissa, B é a base e e é o expoente.
REPRESENTAÇÃO DE NÚMEROS REAIS NO COMPUTADOR
Uma forma comum de representação de números reais no computador pode ser expressa como segue:
Pode-se notar que a base não é expressa. Como a base, para cada computador, será sempre a mesma, não há necessidade de apresentar a base na representação (no exemplo, a base é 2). Dizemos que a base é implícita.
Para cada computador, o número total M de bits para a representação, o número de bits para SN (sinal do número), para SE (sinal do expoente), para a mantissa e para o expoente, são pré-definidos em projeto. 
Assim, podemos concluir que, quanto maior o número de bits para o expoente, maior será a faixa de números que o computador pode representar (maior alcance); e quanto maior o número de bits para a mantissa, maior a precisão da representação. 
Porém, reduzindo-se a mantissa, perde-se precisão e há maior a necessidade de truncar o número (truncar um número é cortar algarismos significativos que não podem ser representados).
FAIXA DE REPRESENTAÇÃO
Como vimos anteriormente, a representação em ponto flutuante tem limites de alcance e de precisão. 
O alcance é limitado pelo número de bits do expoente. 
A precisão é determinada pelo número de bits da mantissa.
Ocorre overflow quando o valor absoluto do dado a ser representado excede a capacidade de representação, porque o número de bits do expoente (neste caso, positivo) é insuficiente para representar o dado.
Um outro
problema ocorre na região de números próximos de zero, que tem o maior expoente negativo possível. 
Ocorre underflow quando o valor absoluto do dado a ser representado é tão pequeno que fica menor que o menor valor absoluto representável. 
Nesse caso, o expoente é negativo mas não representa os números muito próximos de zero e ocorre uma descontinuidade na representação, com os números próximos a zero não sendo representados. 
Underflow não é o mesmo que imprecisão. Dados na faixa de underflow não podem ser representados, ocorrendo estouro no expoente. 
No caso de imprecisão, a normalização permite que o dado seja representado, porém com perda de precisão.

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando