Representação de Dados Propriedades Domínio - Valores que um tipo de dado pode assumir; Gama de variação - N.º de valores que um dado pode assumir; Precisão – Distância entre dois valores consecutivos Operações permitidas sobre dados; Classificação Tipo Escalar Discreto inteiro Não Discreto enumeração Virgula fixa Virgula flutuante Representação de Dados Codificação Representação interna dos dados. MSB – Most Significant Bit – Bit mais significativo LSB – Lower Significant Bit – Bit menos significativo 1 Códigos Binários Inteiros não negativos A representação de números inteiros não negativos é feita pelo código binário natural. Propriedades do código binário natural N.º Bits Gama de variação N 0..2N-1 Tipos pré-definidos em linguagem de alto nível (pascal) 8 0..255 Byte 16 0..65535 word Códigos Binários Representação de números Inteiros negativos A codificação deste tipo de dados é feita com recurso a códigos bipolares. Os códigos bipolares que iremos passar a estudar são os seguintes: • Sinal e valor absoluto • Complementos para 1 • Complementos para 2 2 Códigos Binários Sinal e Valor Absoluto Bit de sinal + valor absoluto O bit de sinal tem 2 valores possíveis: 0 quando o número é positivo 1 quando o número é negativo O valor absoluto utiliza a representação do respectivo valor em código binário natural. Exemplo com N=8 +19 0 + 0010011 (código. binário natural de 19) logo a representação de +19 em sinal e valor absoluto é 00010011. -19 1+0010011 (código. binário natural de 19) logo a representação de -19 em sinal e valor absoluto é 10010011. Códigos Binários Sinal e Valor Absoluto Este código apresenta uma grande desvantagem a existência de dois códigos binários para o valor zero. 0 0000000 (+0) ou 1 0000000 (-0) N.º Bits Gama de variação N -(2N-1 -1)..+(2N-1 -1) 8 -127..+127 16 -32767..+32767 3 Códigos Binários Complemento para 1 Representação de números positivos Os números positivos são representados pelo código binário Natural. Como é facilmente perceptível esta representação é idêntica à usada em igual circunstância ao código do sinal e valor absoluto. Número Representação em complemento para 1 +19 00010011 +10 00001010 +65 01000001 +133 10000101 +255 11111111 Códigos Binários Complemento para 1 Representação de números negativos Os números negativos são obtidos através da complementação bit a bit, da representação em código binário natural do valor absoluto de um certo e determinado número. Número a Representar Valor absoluto Complemento para 1 -19 00010011 11101100 -10 00001010 11110101 -65 01000001 10111110 -133 10000101 Não Representável -255 11111111 Não Representável 4 Códigos Binários Complemento para 1 Desvantagem Tal como a representação em Sinal e Valor Absoluto o complemento para 1 tem dois códigos binários para o valor 0 (zero). São elas, 00000000 e 11111111. N.º Bits Gama de variação N -(2N-1 -1)..+(2N-1 -1) 8 -127..+127 16 -32767..+32767 O total de valores distintos representáveis é de 2N -1. Códigos Binários Complemento para 1 Somas algébricas Vamos analisar alguns exemplos de como devemos proceder para efectuar-mos somas algébricas em complemento para 1. Exemplo 1: (+10) + (-2)=+8 (N=5) (+10) 01010 (-2) 11101 00010 (+2) Soma binária 100111 1 (+8) Soma do ultimo transporte (se?0) 01000 5 Códigos Binários Complemento para 1 Somas algébricas Exemplo 2: (-8) + (-5)=-13 (N=5) (-8) 10111 01000 (+8) (-5) 11010 00101 (+5) Soma binária 110001 Soma do ultimo transporte (se?0) 1 (-13) 10010 01101 (+13) Códigos Binários Complemento para 1 Somas algébricas Existem situações em que o resultado da soma algébrica não é representável com o mesmo número de bits utilizados para os operandos. Nesta situação dizemos que ocorreu um overflow Exemplo 3: (-10) + (-7)=-17 (N=5) (-10) 10101 01010 (+10) (-7) 11000 00111 (+7) Soma binária 101101 Soma do ultimo transporte (se?0) 1 (-17) 01110 01110 (+14) ?????????????????????????? Neste Exemplo houve OVERFLOW. Por norma isto acontece quando os dois últimos n −1 transportes são diferentes. Excepto quando o resultado é igual a − (2 − 1) 6 Códigos Binários Complemento para 2 Representação de números positivos e nulos Os números positivos são representados pelo código binário Natural. Como é facilmente perceptível esta representação é idêntica à usada em igual circunstância ao código do sinal e valor absoluto e complemento para 1. Número Representação em complemento para 2 0 00000000 +19 00010011 +65 01000001 +133 10000101 +255 11111111 Como se pode ver o valor 0 (zero) em complemento para 2 tem uma única representação. Códigos Binários Complemento para 2 Representação de números negativos Os números negativos são obtidos através da passagem para complemento para 1, da representação em código binário natural do valor absoluto de um certo e determinado número, seguido da adição de 1. N.º a Representar Valor absoluto Complemento 1 Valor a somar Complemento 2 -19 00010011 11101100 +1 11101101 -10 00001010 11110101 +1 11110110 -65 01000001 10111110 +1 10111111 -133 10000101 Não Representável +1 Não Representável -255 11111111 Não Representável +1 Não Representável 7 Códigos Binários Complemento para 2 Representação de números negativos Regra Prática: A partir do código binário natural do número em valor absoluto (positivo), copiam-se os bits, começando pelo menos significativo, até se encontrar o primeiro 1 que também se copia; a partir daí, substituem-se os 1 por 0 e vice versa. Exemplo 1 : Obtenção de -19 em C2 Exemplo 2: Obtenção de -24 em C2 +19 00010011 +24 00011000 -19 11101101 -24 11101000 copiar complementar copiar complementar Códigos Binários Complemento para 2 Regra Prática: Em complemento para 2 podemos aplicar a seguinte regra para determinar o valor inteiro (positivo ou negativo) representado por uma determinada codificação, bastando para isso, atribuir o peso que cada bit tem em código binário natural, sendo que o MSB tem um peso negativo, e efectuar a respectiva soma algébrica. Analisemos o seguinte exemplo considerando N=5 Posição Pesos 4 3 2 1 0 1 0 1 0 1 -16 +8 +4 +2 +1 Como podemos ver o bit de sinal (MSB) é negativo. Esta regra aplica-se igualmente números inteiros positivos. para Efectuando a respectiva soma algébrica temos: -16+4+1= -11 8 Códigos Binários Complemento para 2 Vantagem Ao contrário das representações em Sinal e Valor Absoluto e complemento para 1 o valor 0 (zero) tem uma representação única em complemento para 2, 00000000 (N=8). N.º Bits Gama de variação N -(2N-1)..+(2N-1 -1) 8 -128..+127 16 -32768..+32767 O total de valores distintos representáveis é de 2N. Códigos Binários Complemento para 2 Aumento da gama de variação O aumento da gama de variação pode ser feito através da propagação do bit de sinal para a esquerda. Se o número é negativo propaga-se para a esquerda o bit se sinal 1, se o número é positivo propaga-se 0. Exemplo: Aumento da gama de variação de N=4 para N=8 -8 1000 11111000 +4 0100 00000100 -7 1001 11111001 9 Códigos Binários Complemento para 2 Somas algébricas Em complemento para 2 as somas algébricas são efectuadas através de uma soma binária, desprezando-se no final o último transporte. Sempre que o desprezar do ultimo transporte leve a uma representação incorrecta do resultado da soma binária em causa, significa que ocorreu um overflow. (+8) 01000 (-3) 11101 Soma binária 00011 (+ 3) 100101 (+5) Despreza-se Códigos Binários Complemento para 2 Somas algébricas Regra prática: Por norma verifica-se a existência de um overflow em somas algébricas em C2 quando os dois últimos transportes da soma binária são diferentes. (-12) 10100 01100 (+12) (-14) 10010 01110 (+14) Despreza-se 100110 (-26) (-10) 10110 01010 (+10) (-6) 11010 00110 (+ 6) Soma binária 2 últimos transportes diferentes Há overflow Soma binária 110000 (-16) 2 últimos transportes iguais Despreza-se Não há overflow 20 10 Códigos Binários Complemento para 2 Resumo O código de complemento para 2 é o código bipolar mais utilizado nos sistema computacionais por: • Utilizar um código único para o valor 0; • Utilizar a totalidade dos códigos binários na representação dos números (2N), visto que a sua gama de variação é -(2N-1) ... +(2N-1-1); • Transformar as adições e subtracções em somas algébricas, utilizando apenas circuitos somadores binários; • Comparativamente ao código de complemento para 1, as somas algébricas são menos complexas, já que o último transporte é desprezado; 21 Códigos Binários Código BCD 8421 (Binary Coded Decimal) Uma vez que a conversão de binário para decimal é particularmente difícil (quando comparada com outras notações) e uma vez que existem muitos equipamentos digitais com saídas e/ou entradas decimais (calculadoras, jogos....) desenvolveu-se um código binário especial para representação desses números decimais. Neste código a representação de cada dígito decimal é feita por um conjunto de 4 bits. Por exemplo o número decimal 458 tem como representação 0100 0101 1000 (12 bits). A grande vantagem é a conversão imediata de BCD para decimal. Conversão de decimal para BCD Conversão de BCD para decimal 22 11 Códigos Binários Código BCD 8421 (Binary Coded Decimal) 23 Códigos Binários Valores Lógicos Estes valores são representados à custa de um byte. A representação dos valores lógicos True (verdadeiro) e False (falso) é feita da seguinte forma: true – (-1) em C2 - 11111111 false – 0 em C2 - 00000000 Operações lógicas elementares NOT - Complementação; AND - Conjunção - Produto lógico; OR - Disjunção - Soma Lógica; XOR - Ou exclusivo; Como exemplo podemos referir a determinação de NOT(true) ⇔ NOT(11111111)=00000000 (false). Na Prática efectuamos a complementação bit a bit. 24 12 Códigos Binários Caracteres A codificação de caracteres é feita através do conhecido código ASCII (American Standart Code for Information Interchange). Cada símbolo (dígito, letra, sinal de pontuação, etc.) é representado à custa de um byte (7 bits +1). Inicialmente o oitavo bit era utilizado como bit paridade, sendo, actualmente utilizado na obtenção de 128 códigos adicionais para codificação de caracteres acentuados e outros símbolos. 25 13