FACULDADE DE ENGENHARIA DA UNIVERSIDADE DO PORTO REPRESENTAÇÃO DE DADOS E SISTEMAS DE NUMERAÇÃO LUÍS PAULO REIS LICENCIATURA EM CIÊNCIA DA INFORMAÇÃO DISCIPLINA DE INFORMÁTICA BÁSICA - 1º ANO SETEMBRO DE 2002 Representação de Dados e Sistemas de Numeração ÍNDICE ÍNDICE _____________________________________________________________________ 2 1 2 Bits & Bytes______________________________________________________________ 4 1.1 Bit _________________________________________________________________ 4 1.2 Byte ________________________________________________________________ 4 1.3 Múltiplos do Byte_____________________________________________________ 6 Sistemas de Numeração ____________________________________________________ 8 2.1 Números ____________________________________________________________ 8 2.2 Base de um Sistema de Numeração ______________________________________ 8 2.3 Representação Binária ________________________________________________ 8 2.4 Representação Octal e Hexadecimal ____________________________________ 10 2.4.1 Algumas questões típicas sobre sistemas de numeração ___________________ 11 3 Conversão de Números entre Bases Diferentes_________________________________ 12 3.1 Conversões entre as bases 2, 8 e 16 _____________________________________ 12 3.1.1 Conversão de Base.: Binária(Base 2) => Octal(Base 8) ___________________ 12 3.1.2 Conversão de Base.: Octal(Base 8) => Binária(Base 2) ___________________ 12 3.1.3 Conversão de Base.: Binária(Base 2) => Hexadecimal(Base 16) ____________ 12 3.1.4 Conversão de Base.: Hexadecimal(Base 16) => Binária(Base 2) ____________ 12 3.2 Outras conversões ___________________________________________________ 12 3.2.1 Conversão de Base.: Binário => Decimal ______________________________ 13 3.2.2 Conversão de Base.: Octal => Decimal________________________________ 13 3.2.3 Conversão de Base.: Hexadecimal => Decimal _________________________ 13 3.2.4 Conversão de Base.: Base Qualquer => Decimal ________________________ 14 3.3 Conversão de Números da Base 10 para uma Base b qualquer ______________ 14 3.3.1 Parte Inteira: ____________________________________________________ 14 3.3.2 Parte Fraccionária ________________________________________________ 15 4 3.4 Conversão de Números entre duas Bases quaisquer _______________________ 15 3.5 Exercícios Simples de Conversão de Números entre duas Bases _____________ 16 Aritmética Binária _______________________________________________________ 17 4.1 Adição _____________________________________________________________ 17 4.2 Subtracção _________________________________________________________ 17 4.3 Multiplicação _______________________________________________________ 18 4.4 Divisão_____________________________________________________________ 18 4.5 Aritmética Binária Complementar _____________________________________ 19 4.5.1 Algoritmos para determinação do Complemento ________________________ 19 4.5.2 Algoritmos para Subtracção ________________________________________ 20 5 Representação de Dados___________________________________________________ 21 5.1 Tipos de Dados ______________________________________________________ 21 5.2 Dados Numéricos ____________________________________________________ 21 Luís Paulo Reis / 2002 Pág. 2 Representação de Dados e Sistemas de Numeração 5.2.1 -2n-1+1 <= X <= 2n-1-1 _____________________________________________ 22 5.3 REPRESENTAÇÃO EM SINAL E MAGNITUDE________________________ 22 5.3.1 FAIXA DE REPRESENTAÇÃO ____________________________________ 22 5.4 ARITMÉTICA EM SINAL E MAGNITUDE ____________________________ 23 5.4.1 Algoritmo da Soma _______________________________________________ 23 5.4.2 Algoritmo da subtracção ___________________________________________ 23 5.5 REPRESENTAÇÃO DE NÚMEROS EM COMPLEMENTO ______________ 23 5.5.1 REPRESENTAÇÃO DE NÚMEROS POSITIVOS EM COMPLEMENTO___ 23 5.5.2 REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A (BASE - 1) ______________________________________________________________ 23 5.5.3 FAIXA DE REPRESENTAÇÃO ____________________________________ 24 5.5.4 ARITMÉTICA EM COMPLEMENTO A (BASE - 1) ____________________ 25 5.5.5 REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A BASE 25 5.5.6 FAIXA DE REPRESENTAÇÃO ____________________________________ 26 Exercício 1 – Sistemas de Numeração e Conversões de Base _________________________ 27 Exercícios - Representação de Dados e Aritmética Binária e Complementar ____________ 28 Tabela para auxílio nos cálculos de conversões ____________________________________ 29 Luís Paulo Reis / 2002 Pág. 3 Representação de Dados e Sistemas de Numeração 1 Bits & Bytes 1.1 Bit Bit é a menor unidade de informação que um computador pode processar. é um minúscula célula de informação dentro da memória RAM. Se nesta pequena célula não há passagem de corrente eléctrica, o valor assumido é 0(zero). Se ali está passando energia eléctrica, então o valor assumido é 1(um). Como visto, só existem dois estados possíveis para um bit, desligado ou ligado. 1 1.2 Byte Byte é a unidade de informação que consegue representar um caracter. É composto de oito bits. Caracter é qualquer letra(maiúscula ou minúscula) letra, símbolo, ou caracteres gráficos especiais. 10110010 Existe dentro do microprocessador uma tabela de caracteres chamada de Tabela ASCII(leia-se asqui-i). Esta tabela possui 256 posições. Porque 256? É o número máximo de combinações possíveis com 8 bits. Para cada uma dessas 256 posições, existe um caractere associado. Veja a Tabela ASCII e seus caracteres com seus códigos em decimal, octal e hexadecimal, logo abaixo. Luís Paulo Reis / 2002 Pág. 4 Representação de Dados e Sistemas de Numeração Os caracteres de 00010 até 03210 são caracteres de controle. Normalmente usados para indicar início de arquivo, fim de linha, fim de arquivo, ou ainda, comandos de impressão como modo condensado, salto de página, etc... Na tabela abaixo, encontram-se representados estes comandos: Decimal Nome Descrição 000 NUL Caracter Nulo (null) 001 SOH Início de Cabeçalho (Start of Heading) 002 STX Início de Texto (Start of Text) 003 ETX Fim de Texto (End of Text) 004 EOT Fim de Transmissão (End of Transmission) Luís Paulo Reis / 2002 Pág. 5 Representação de Dados e Sistemas de Numeração 005 ENQ Requisição (Enquiry) 006 ACK Ciente (Acknowledge) 007 BEL Campainha (Bell Audible Signal) 008 BS Volta uma Posição (Backspace) 009 HT Tabulação Horizontal (Horizontal Tabulation) 010 LF Mudança de Linha (Line Feed) 011 VT Tabulação Vertical (Vertical Tabulation) 012 FF Alimentação de Formulário (Form Feed) 013 CR Retorno do Carro (Carriage Return) 014 SO Desliga Caixa Alta (Shift Out) 015 SI Liga Caixa Alta (Shift In) 016 DLE Escape de Linha de Dados (Data Link Escape) 017 DC1 Controle do Dispositivo nº 1 (Device Control 1) 018 DC2 Controle do Dispositivo nº 2 (Device Control 2) 019 DC3 Controle do Dispositivo nº 3 (Device Control 3) 020 DC4 Controle do Dispositivo nº 4 (Device Control 4) 021 NAK Ciente Negativo (Negative Acknowledge) 022 SYN Manter Sincronismo (Synchronous Idle) 023 ETB Fim de Bloco de Transmissão (End of Transmission Block) 024 CAN Cancelamento (Cancel) 025 EM Fim de Suporte (End of Medium) 026 SUB Substituição (Substitute) 027 ESC Escape 028 FS Separador de Arquivo (File Separator) 029 GS Separador de Grupo (Group Separator) 030 RS Separador de Registro (Record Separator) 031 US Separador de Unidade (Unit Separator) 032 SP Espaço em Branco (Space) 127 DEL Delete Os caracteres de 03310 até 04710 são símbolos como ponto, vírgula, ponto de exclamação, etc... Os caracteres de 04810 até 05710 são os números. Os caracteres de 05810 até 06410 são alguns outros caracteres especiais. Os caracteres de 06510 até 09010 são as letras maiúsculas. Os caracteres de 09110 até 09610 são alguns outros caracteres especiais. Os caracteres de 09710 até 12210 são as letras minúsculas. Os caracteres de 12310 até 25510 são algumas letras acentuadas, caracteres gráficos, etc... 1.3 Múltiplos do Byte Kilobyte ou Kb corresponde a 1024 bytes. Porque 1024 e não 1000, como no caso do quilograma ou quilómetro? Devido aos sistemas de numeração utilizados por nós e pelo computador. O sistema de o computador utiliza é o sistema binário(2) e o que nós mais utilizamos é o decimal(10). Se pegarmos o número 2 e elevarmos a 10º potência, chegaremos ao número acima. 210=1024. Megabyte ou Mb corresponde a 1024 Kb. Gigabyte ou Gb corresponde a 1024 Mb. Luís Paulo Reis / 2002 Pág. 6 Representação de Dados e Sistemas de Numeração Terabyte ou Tb corresponde a 1024 Gb. Quadro Comparativo Unidade Qtd. Tbytes Qtd. Gbytes Qtd. Mbytes Qtd. Kbytes Qtd. bytes 1 bit 1 byte Mbyte 1 Gbyte Luís Paulo Reis / 2002 1 1024 1 * 10242 10242 8 * 10243 10243 8 * 4 * 1024 1 10241 10241 10242 1024 2 1024 3 8 1 1 Kbyte Tbyte Qtd. bits 1024 1 4 1024 8 1024 8 Pág. 7 Representação de Dados e Sistemas de Numeração 2 Sistemas de Numeração 2.1 Números Acredita-se que a necessidade de criação de números veio com a necessidade de contar. Seja o número de animais, alimentos, ou coisas do tipo. Como a evolução nos legou algumas características, como os cinco dedos em cada mão (fingers) e cinco dedos em cada pé (toes), seria muito natural que os primeiros sistemas de numeração fizessem uso das bases 10 (decimal) e 20 (vigesimal). O número 80, em francês, escrito como quatre-vingt (ou, quatro vezes o vinte) é remanescente de um sistema vigesimal. O método ao qual estamos acostumados usa um sistema de numeração posicional. Isso significa que a posição ocupada por cada algarismo em um número altera o seu valor de uma potência de 10(na base 10), para cada casa à esquerda. Por exemplo, no sistema decimal(base 10), no número 125 o algarismo 1 representa uma centena(100 = 102), o algarismo 2 representa duas dezenas(2 x 10 = 101) e o 0 algarismo 5 representa cinco unidades(5 x 10 ). Somando: 100 + 20 + 5 = 125. Vamos estudar neste capítulo, algo sobre os sistemas de numeração mais usados na informática. 2.2 Base de um Sistema de Numeração A base de um sistema de numeração qualquer, é a quantidade de algarismos disponível na representação. A base 10 é hoje a mais usualmente empregada, embora não seja a única utilizada. No comércio pedimos uma dúzia de rosas ou uma grosa de parafusos (base 12) e também marcamos o tempo em minutos e segundos (base 60). Os computadores utilizam a base 2 (sistema binário) e os programadores, por facilidade, usam em geral uma base que seja uma potência de 2, tal como 24 (base 16 ou sistema hexadecimal) ou eventualmente ainda 23 (base 8 ou sistema octal). Na base 10, dispomos de 10 algarismos para a representação do número: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. Na base 2, seriam apenas 2 algarismos: 0 e 1. Na base 16, seriam 16: os 10 algarismos aos quais estamos acostumados, mais os símbolos A, B, C, D, E e F, representando respectivamente 10, 11, 12, 13, 14 e 15 unidades. Generalizando, temos que uma base b qualquer disporá de b algarismos, variando entre 0 e (b-1). A representação 125,3810 (base 10) significa 1x102 + 2x101 + 5x100 + 3x10-1 + 8x10-2 : Generalizando, representamos uma quantidade N qualquer, numa dada base b, com um número tal como segue: n 2 1 0 -1 -2 -n Nb = an.b + .... + a2.b + a1.b + a0.b + a-1.b + a-2.b + .... + a-n.b sendo que an.bn + .... + a2.b2 + a1.b1 + a0.b0 é a parte inteira e a-1.b-1 + a-2.b-2 + .... + a-n.b-n é a parte fraccionária. Intuitivamente, sabemos que o maior número que podemos representar, com n algarismos, na base b, será o número composto n vezes pelo maior algarismo disponível naquela base (ou seja, b-1). Por exemplo, o maior número que pode ser representado na base 10 usando 3 algarismos será 999 (ou seja, 103 - 1 = 999). Generalizando, podemos ver que o maior número inteiro N que pode ser representado, em uma dada base b, com n algarismos (n "casas"), será N = bn - 1. Assim, o maior número de 2 algarismos na base 16 será FF16 que, na base 10, equivale a 25510 = 162 - 1. 2.3 Representação Binária Os computadores modernos utilizam apenas o sistema binário, isto é, todas as informações armazenadas ou processadas no computador usam apenas DUAS grandezas, representadas pelos algarismos 0 e 1. Essa decisão de projecto deve-se à maior facilidade de representação interna no Luís Paulo Reis / 2002 Pág. 8 Representação de Dados e Sistemas de Numeração computador, que é obtida através de dois diferentes níveis de tensão. Havendo apenas dois algarismos, portanto dígitos binários, o elemento mínimo de informação nos computadores foi apelidado de bit (uma contracção do inglês binary digit). Na base 2, o número "10" vale dois. Mas se 102 = 210, então dez é igual a dois? Não, dez não é e nunca será igual a dois! Na realidade, "10" não significa necessariamente "dez". Nós estamos acostumados a associar "10" a "dez" porque estamos acostumados a usar o sistema de numeração decimal. O número • 102 seria lido "um-zero" na base 2 e vale 210 (convertido para "dois" na base dez), • 105 seria lido "um-zero" na base 5 e vale 510 (convertido para "cinco" na base dez), • 1010 pode ser lido como "um-zero" na base 10 ou então como "dez" na base dez, • 1016 seria lido "um-zero" na base 16 e vale 1610 (convertido para "dezasseis" na base dez), etc. Portanto, 10 só será igual a dez se - e somente se - o número estiver representado na base dez! Uma curiosidade: o número "10b" vale sempre igual à base, porque em uma dada base b os algarismos possíveis vão sempre de 0 a (b - 1)! Como o maior algarismo possível em uma dada base b é igual a (b1), o próximo número será (b - 1 + 1 = b) e portanto será sempre 10 e assim, numa dada base qualquer, o valor da base será sempre representado por "10"! Obs.: Toda vez que um número for apresentado sem que seja indicado em qual sistema de numeração ele está representado, estenderemos que a base é dez. Sempre que outra base for utilizada, a base será obrigatoriamente indicada. Um dia pode ser que os computadores se tornem obrigatórios e sejamos todos forçados por lei a estudar a aritmética em binário! Mas, mesmo antes disso, quem programa computadores precisa conhecer a representação em binário! Vamos começar entendendo as potências de dois (calma, isso é só o começo, depois piora!): Rep. Binária Potência 1 10 100 1 1 2 2 4 2 2 3 8 4 16 5 32 6 64 7 128 8 256 9 512 10 1024 11 2048 12 4096 13 8192 1000 2 10000 2 100000 2 1000000 2 10000000 2 100000000 2 1000000000 10000000000 2 2 100000000000 2 1000000000000 2 10000000000000 Rep. Decimal 0 2 2 Depois (e só depois) de compreender bem a tabela acima, fazendo a devida correlação com a representação decimal, é conveniente decorar (aaaaaarrrrrrggggggghhhhhh!!!!!) os valores da tabela. As conversões entre base dois e base dez e as potências de dois são utilizadas a todo momento e seria perda de tempo estar toda hora convertendo. Da mesma forma que, uma vez entendido o mecanismo da multiplicação, decoramos a tabuada, é muito mais efectivo saber de cor a tabela acima que fazer as contas de conversão toda vez que for necessário. A representação binária é perfeitamente adequada para utilização pelos computadores. No entanto, um número representado em binário apresenta muitos bits, ficando longo e passível de erros quando manipulado por seres humanos normais como por exemplo os programadores, analistas e engenheiros de sistemas (bem, não tão normais assim ...). Para facilitar a visualização e manipulação por programadores de grandezas processadas em computadores, são usualmente adoptadas as representações octal (base 8) e principalmente hexadecimal (base 16). Ressaltamos mais uma vez que Luís Paulo Reis / 2002 Pág. 9 Representação de Dados e Sistemas de Numeração o computador opera apenas na base 2 e as representações octal e hexadecimal não são usadas no computador, elas se destinam apenas à manipulação de grandezas pelos programadores. 2.4 Representação Octal e Hexadecimal Em projectos de informática (isto é, nos trabalhos realizados pelos programadores, analistas e engenheiros de sistemas), é usual representar quantidades usando sistemas em potências do binário (octal e principalmente hexadecimal), para reduzir o número de algarismos da representação e consequentemente facilitar a compreensão da grandeza e evitar erros. No sistema octal (base 8), cada três bits são representados por apenas um algarismo octal (de 0 a 7). No sistema hexadecimal (base 16), cada quatro bits são representados por apenas um algarismo hexadecimal (de 0 a F). A seguir, apresentamos uma tabela com os números em decimal e sua representação correspondente em binário, octal e hexadecimal: Binária(2) Octal(8) Decimal(10) Hexadecimal(16) 0 0 0 0 1 1 1 1 10 2 2 2 11 3 3 3 100 4 4 4 101 5 5 5 110 6 6 6 111 7 7 7 1000 10 8 8 1001 11 9 9 1010 12 10 A 1011 13 11 B 1100 14 12 C 1101 15 13 D 1110 16 14 E 1111 17 15 F 10000 20 16 10 10001 21 17 11 10010 22 18 12 10011 23 19 13 10100 24 20 14 10101 25 21 15 10110 26 22 16 10111 27 23 17 11000 30 24 18 Nota: a base 16 ou sistema hexadecimal pode ser indicada também por um "H" ou "h" após o número; por exemplo: FFH significa que o número FF (ou 255 em decimal) está em hexadecimal. Não confundir o "H" ou "h" com mais um dígito, mesmo porque em hexadecimal só temos algarismos até "F" e portanto não existe um algarismo "H". Exemplo: Como seria a representação do número 1610 em binário, octal e hexadecimal? Solução: Seria respectivamente 100002, 208 e 1016. De acordo com a tabela acima, o número decimal 20 é representado por 2010, isto é, escreve-se o número e um índice indicando a base em que está representado. Geralmente, a base é o número de Luís Paulo Reis / 2002 Pág. 10 Representação de Dados e Sistemas de Numeração dedos com os quais temos que contar as coisas. Por exemplo, para se contar algo no sistema hexadecimal(Base 16), temos que usar dezasseis dedos. Tem-se portanto a seguinte equivalência: 101002 = 248 = 2010 = 1416 2.4.1 Algumas questões típicas sobre sistemas de numeração 1. 2. 3. 4. 5. Qual o decimal equivalente a 110110112? Qual o octal equivalente a 110110112? Qual o hexadecimal equivalente a 110110112? Qual o binário equivalente à sua idade? Qual seus equivalentes octal, decimal e hexadecimal? Qual o maior binário que pode ser representado por uma série de 16 bits? Qual seus equivalentes octal, decimal e hexadecimal? Luís Paulo Reis / 2002 Pág. 11 Representação de Dados e Sistemas de Numeração 3 Conversão de Números entre Bases Diferentes 3.1 Conversões entre as bases 2, 8 e 16 As conversões mais simples são as que envolvem bases que são potências entre si. 3.1.1 Conversão de Base.: Binária(Base 2) => Octal(Base 8) Vamos exemplificar com a conversão entre a base 2 e a base 8. Como 23 = 8, separando os bits de um número binário em grupos de três bits (começando sempre da direita para a esquerda!) e convertendo cada grupo de três bits para seu equivalente em octal, teremos a representação do número em octal. Por exemplo: 101010012 => 10.101.0012 Separando em grupos de 3, da direita p/ esquerda. 2518 Sabemos que 0102 = 28 ; 1012 = 58 ; 0012 = 18 portanto 101010012 = 2518 3.1.2 Conversão de Base.: Octal(Base 8) => Binária(Base 2) Vamos fazer agora a operação inversa. Iremos exemplificar com a conversão entre a base 8 e a base 2. Devemos pegar cada dígito octal e convertendo para o binário, teremos a representação do número. Por exemplo: 32578 => 011.010.101.1112 Convertendo cada dígito octal em 3 dígitos binários. 3.1.3 Conversão de Base.: Binária(Base 2) => Hexadecimal(Base 16) Vamos agora exemplificar com uma conversão entre as bases 2 e 16. Como 24 = 16, basta separarmos em grupos de 4 bits (começando sempre da direita para a esquerda!) e converter. Por exemplo: 110101011012 => 110.1010.11012 6AD16 Separando em grupos de 4, da direita p/ esquerda. Sabemos que 1102 = 616 ; 10102 = A16 ; 11012 = D16 portanto 110101011012 = 6AD16 3.1.4 Conversão de Base.: Hexadecimal(Base 16) => Binária(Base 2) Vamos fazer novamente a operação inversa da anterior. Iremos exemplificar com a conversão entre a base 16 e a base 2. Devemos pegar cada dígito hexadecimal e convertendo para o binário, teremos a representação do número. Por exemplo: cada dígito 4CF616 => 0100 . 1100 . 1111 . 01102 Convertendo hexadecimal em 4 dígitos binários. 3.2 Outras conversões Vamos agora exercitar outras conversões. Quanto seria 3F5h(h = Base 16) em octal? O método mais prático seria converter para binário e em seguida para octal. Luís Paulo Reis / 2002 Pág. 12 Representação de Dados e Sistemas de Numeração 3F516 => 11 . 1111 . 01012 Convertendo cada dígito hexadecimal em 4 dígitos binários. Separando em grupos de 3, 11111101012 => 1 . 111 . 110 . 1012 da direita p/ esquerda. Sabemos que 12 17658 Portanto 3F516 = 18 ; 1112 = 78 ; 1102 = 68 ; 1012 = 58 = 11111101012 = 17658 3.2.1 Conversão de Base.: Binário => Decimal A primeira operação que iremos realizar de conversão entre bases é a de Binária(Base 2) para Decimal(Base 10). Tomemos um número Binário qualquer, por exemplo.: 10101011. Faremos então o seguinte: 128 64 32 16 8 4 2 1 7 2 2 6 5 2 4 2 (1 * 1) + (1 * 2) + (0 * 4) + (1 * 8) + (0 * 16) + (1 * 32) + (0 * 64) + (1 * 128) = 3 2 1 0 2 2 2 2 = 1 + 2 + 8 + 32 + 128 = 169 Portanto.: 101010112 = 16910 1 0101011 Outro exemplo com um número binário maior.: 2048 1024 512 256 128 64 32 16 8 4 2 1 (1 * 1) + (1 * 2) + (0 * 4) + (1 * 8) + (1 * 16) + (0 * 32) + 211 210 29 28 27 26 25 24 23 22 21 20 (0 * 64) + (1 * 128) + (0 * 256) + (0 * 512) + (1 * 1024) + (1 * 2048) = = 1 + 2 + 8 + 16 + 128 + 1024 + 2048 = 3227 Portanto.: 1100100110112 = 322710 1 1 0 0 1 0011011 3.2.2 Conversão de Base.: Octal => Decimal A próxima operação que iremos realizar de conversão entre bases é a de Octal(Base 8) para Decimal(Base 10). Tomemos um número Octal qualquer, por exemplo.: 1324. Faremos então o seguinte: 512 64 8 1 3 8 2 8 (4 * 1) + (2 * 8) + (3 * 64) + (1 * 512) = 1 0 8 8 = 4 + 16 + 192 + 512 = 724 Portanto.: 13248 = 72410 1 324 Outro exemplo com um número octal maior.: 123456 32768 4096 512 64 8 1 5 4 3 8 8 2 (6 * 1) + (5 * 8) + (4 * 64) + (3 * 512) + (2 * 4096) + (1 * 32768) = 1 0 8 8 = 6 + 40 + 256 + 1536 + 8192 + 32768 = 42798 Portanto.: 1234568 = 4279810 8 8 1 2 3 456 3.2.3 Conversão de Base.: Hexadecimal => Decimal A operação seguinte que iremos realizar de conversão entre bases é a de Hexadecimal(Base 16) para Decimal(Base 10). Tomemos um número Hexadecimal qualquer, por exemplo.: 1111. Faremos então o seguinte: 4096 256 16 1 (1 * 1) + (1 * 16) + (1 * 256) + (1 * 4096) = 162 161 160 = 1 + 16 + 256 + 4096 = 4369 Portanto.: 111116 = 436910 163 1 1 1 1 Outro exemplo com um número hexadecimal um pouco maior.: 2B0F 4096 256 16 1 3 16 Luís Paulo Reis / 2002 2 16 (15 * 1) + (0 * 16) + (11 * 256) + (2 * 4096) = A = 10 B = 11 16 16 = 15 + 0 + 2816 + 8192 = 11023 1 0 Pág. 13 Representação de Dados e Sistemas de Numeração 2 B 0 F Portanto.: 2B0F16 = 1102310 C = 12 D = 13 E = 14 F = 15 Outro exemplo com um número hexadecimal diferente.: ACDE 4096 256 16 1 16 3 2 16 A = 10 B = 11 (14 * 1) + (13 * 16) + (12 * 256) + (10 * 4096) = 16 16 C = 12 = 14 + 208 + 3072 + 40960 = 44254 D = 13 Portanto.: ACDE16 = 4425410 E = 14 F = 15 1 0 A C DE 3.2.4 Conversão de Base.: Base Qualquer => Decimal Vamos relembrar a expressão já apresentada: n 2 1 0 -1 -2 Nb = an.b + .... + a2.b + a1.b + a0.b + a-1.b + a-2.b + .... + a-n.b -n A melhor forma de fazer a conversão é usando essa expressão. Tomando como exemplo o número 1011012, vamos calcular seu valor representado na base dez. Usando a expressão acima, fazemos: 1011012 = 1x25 + 0x24 + 1x23 + 1x22 + 0x21 + 1x20 = 32 + 0 + 8 + 4 + 0 + 1 = 4510 Podemos fazer a conversão de números em qualquer base para a base 10 usando o algoritmo acima. Exemplos: a) Converter 4F5h para a base 10 . Solução: Lembramos que o H significa que a representação é hexadecimal (base 16). Sabemos ainda 2 1 0 que F16=1510. Então: 4x16 + 15x16 + 5x16 = 4x256 + 15x16 + 5 = 1024 + 240 + 5 = 126910 b) Converter 34859 para a base 10. Solução: 3x93 + 4x92 + 8x91 + 5x90 = 3x729 + 4x81 + 8x9 + 5 = 2187 + 324 + 72 + 5 = 258810. c) Converter 7G16 para a base 10. Solução: Uma base b dispõe dos algarismos entre 0 e (b-1). Assim, a base 16 dispõe dos algarismos 0 a F e portanto o símbolo G não pertence à representação hexadecimal. d) Converter 1001,012 para a base 10. Solução: 1x23 + 0x22 + 0x21 + 1x20 + 0x2-1 + 1x2-2 = 8 + 0 + 0 + 1 + 0 + 0,25 = 9,2510 e) Converter 34,35 para a base 10. 1 0 -1 Solução: 3x5 + 4x5 + 3x5 = 15 + 4 + 0,6 = 19,610 f) Converter 38,38 para a base 10. Solução: Uma base b dispõe dos algarismos entre 0 e (b-1). Assim, a base 8 dispõe dos algarismos 0 a 7 e portanto o algarismo 8 não existe nessa base. A representação 38,3 não existe na base 8. 3.3 Conversão de Números da Base 10 para uma Base b qualquer A conversão de números da base dez para uma base qualquer emprega algoritmos que serão o inverso dos acima apresentados. Os algoritmos serão melhor entendidos pelo exemplo que por uma descrição formal. Vamos a seguir apresentar os algoritmos para a parte inteira e para a parte fraccionária: 3.3.1 Parte Inteira: O número decimal será dividido sucessivas vezes pela base; o resto de cada divisão ocupará sucessivamente as posições de ordem 0, 1, 2 e assim por diante até que o resto da última divisão (que resulta em quociente zero) ocupe a posição de mais alta ordem. Veja o exemplo da conversão do número 1910 para a base 2: 19 | 2 Luís Paulo Reis / 2002 9 | 2 4 | 2 2 | 2 1 | 2 Pág. 14 Representação de Dados e Sistemas de Numeração a0=1 +---9 Portanto.: 1910 a1=1 +---4 a2=0 +---2 a3=0 +---1 a4=1 +---0 = 100112 Experimente fazer a conversão contrária (retornar para a base 10) e ver se o resultado está correcto. 3.3.2 Parte Fraccionária Se o número for fraccionário, a conversão se fará em duas etapas distintas: primeiro a parte inteira e depois a parte fraccionária. Os algoritmos de conversão são diferentes. O algoritmo para a parte fraccionária consiste de uma série de multiplicações sucessivas do número fraccionário a ser convertido pela base; a parte inteira do resultado da primeira multiplicação será o valor da primeira casa fraccionária e a parte fraccionária será de novo multiplicada pela base; e assim por diante, até o resultado dar zero ou até encontrarmos o número de casas decimais desejado. Por exemplo, vamos converter 15,6510 para a base 2, com 5 e com 10 algarismos fraccionários: 15 | 2 +---a0=1 7 Parte Inteira.: 1510 7 | 2 +---a1=1 3 3 | 2 +---a2=1 1 = 11112 1 | 2 +---a3=1 0 0,65 x 2 = 1,3 0,8 x 2 = 1,6 0,3 x 2 = 0,6 0,6 x 2 = 1,2 0,6 x 2 = 1,2 0,2 x 2 = 0,4 0,2 x 2 = 0,4 0,4 x 2 = 0,8 0,4 x 2 = 0,8 0,8 x 2 = 1,6 Obs.: Em ambos os casos, a conversão foi interrompida quando encontramos o número de algarismos fraccionários solicitadas no enunciado. No entanto, como não encontramos resultado 0 em nenhuma das multiplicações, poderíamos continuar efectuando multiplicações indefinidamente até encontrar (se encontrarmos) resultado zero. No caso de interrupção por chegarmos ao número de dígitos especificado sem encontramos resultado zero, o resultado encontrado é aproximado e essa aproximação será função do número de algarismos que calcularmos. Fazendo a conversão inversa, encontraremos: Com 5 algarismos fraccionários: Parte inteira: 11112 = 1510 Parte fraccionária: 0,101002 = 1x2 + 0x2 + 1x2 + 0x2 + 0x2 = 0,5 + 0,125 = 0,62510 -1 -2 -3 -4 -5 Com 10 algarismos fraccionários: Parte inteira: 11112 = 1510 Parte fraccionária: 0,10100110012 = = 1x2-1 + 0x2-2 + 1x2-3 + 0x2-4 + 0x2-5 + 1x2-6 + 1x2-7 + 0x2-8 + 0x2-9 + 1x2-10 = = 1/2 + 1/8 + 1/64 + 1/128 + 1/1024 = = 0,5 + 0,125 + 0,015625 + 0,0078125 + 0,0009765625 = 0,649414062510 Ou seja, podemos verificar (sem nenhuma surpresa) que, quanto maior número de algarismos forem considerados, melhor será a aproximação. 3.4 Conversão de Números entre duas Bases quaisquer Para converter números de uma base b para uma outra base b’ quaisquer (isso é, que não sejam os casos particulares anteriormente estudados), o processo prático utilizado é converter da base b dada para a base 10 e depois da base 10 para a base b’ pedida. Exemplo: Converter 435 para Base 9. 435 = (4 x 5 + 3)10 = 2310 ==> 23/9 = 2 (resto 5) logo 435 = 2310 = 259 Luís Paulo Reis / 2002 Pág. 15 Representação de Dados e Sistemas de Numeração 3.5 Exercícios Simples de Conversão de Números entre duas Bases Exercício 1: Converta o número1101012 para decimal Solução: 1101012 = 5310 Exercício 2: Converta o número 1011101012 para decimal. Solução: 1011101012 = 37310 Exercício 3: Converta o número FFFF16 para decimal Solução: FFFF16 = 6553510 Exercício 4: Converta o número 0A1216 para decimal Solução: 0A1216 = 257810 Exercício 5: Converta o número 3276810 para binário Solução: 3276810 = 10000000000000002 Exercício 6: Converta o número 67810 para binário Solução: 67810 = 10101001102 Exercício 7: Converta o número 67810 para hexadecimal Solução: 67810 = 2A616 Exercício 8: Converta o número 6553510 para hexadecimal Solução: 6553510 = FFFF16 Tabela Decimal Binário Hexadecimal Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Luís Paulo Reis / 2002 Binário 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F Pág. 16 Representação de Dados e Sistemas de Numeração 4 Aritmética Binária 4.1 Adição A "tabuada" da soma aritmética no sistema de numeração binário é muito simples. São poucas regras: 0 0 1 1 1 + + + + + 0 1 0 1 1 + 1 Exemplo: = = = = = 0 1 1 0 0 (e "vai um" p/ o dígito de ordem superior) (e "vai um" p/ o dígito de ordem superior) Efectuar 011100 + 011010 Obs.: 1) Lembre-se: soma-se as colunas da direita para a esquerda, tal como uma soma em decimal. Obs.: 2) No exemplo, são usadas, em sequência, da direita para a esquerda, todas as regas acima. Obs.: 3) Na primeira linha, em azul, é indicado o "vai um". Obs.: 4) Por simplicidade, no exemplo estamos a considerar dois números positivos. Exemplo: 11 => "vai um" 011100 + 011010 --------= 110110 4.2 Subtracção Vamos ver agora a "tabuada" da subtracção no sistema de numeração binário. São poucas regras: 0 0 1 1 - 0 1 0 1 = = = = 0 1 1 0 (e "vem um" do dígito de ordem superior) Obs.: 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 é exactamente o mesmo da subtracção em decimal a que já estamos acostumados desde o curso primário. Exemplo: Efectuar 111100 - 011010 Obs.: 1) Lembre-se: subtrai-se as colunas da direita para a esquerda, tal como uma subtracção em decimal. Obs.: 2) No exemplo, são usadas, em sequência, da direita para a esquerda, todas as regras acima. Obs.: 3) Na primeira linha, em vermelho, é indicado o "vem um". Obs.: 4) Por simplicidade, no exemplo estamos considerando os dois números positivos. Exemplo: 02 => "vem um" Luís Paulo Reis / 2002 Pág. 17 Representação de Dados e Sistemas de Numeração 111100 - 011010 --------= 100010 4.3 Multiplicação Vamos ver agora a "tabuada" da multiplicação no sistema de numeração binário. São poucas regras: 0 0 1 1 * * * * 0 1 0 1 = = = = 0 0 0 1 Obs.: Vamos lembrar que esse algoritmo é exactamente o mesmo na multiplicação em decimal a que já estamos acostumados desde o curso primário. Exemplo: Efectuar 101101 * 10 Obs.: 1) Lembre-se: multiplica-se as colunas da direita para a esquerda, tal como uma multiplicação em decimal. Obs.: 2) No exemplo, são usadas, em sequência, da direita para a esquerda, todas as regras acima. Obs.: 3) Por simplicidade, no exemplo estamos considerando os dois números positivos. Exemplo: 101101 * 10 --------= 000000 Todo número multiplicado por zero dá zero. 101101+ --------1011010 Faça a prova real. Converta os dois números (101101 e 10) para decimal e multiplique-os. Converta o resultado (1011010) para decimal também e compare os resultados. 4.4 Divisão Para fazermos a divisão binária, devemos proceder da seguinte maneira: Subtrair o Divisor do Dividendo até obtermos resto = 0 ou até o resto não pode ser mais subtraído do divisor. Exemplo: 1011012 / 112 ou 18210 / 310 101101 -11 101010 -11 100111 -11 100100 -11 100001 -11 11110 -11 11011 -11 11000 -11 10101 (1) (2) (3) (4) (5) (6) (7) (8) Luís Paulo Reis / 2002 Pág. 18 Representação de Dados e Sistemas de Numeração -11 10010 (9) -11 1111 (10) -11 1100 (11) -11 1001 (12) -11 110 (13) -11 11 (14) -11 0 (15) O Resultado portanto é 15 (11112) e o resto é 0. Para fazermos a divisão, tanto em binário quanto em octal ou hexadecimal, uma outra maneira simples de fazê-lo, é convertendo o dividendo e o divisor para decimal. Faz-se a divisão entre os dois números. Por último pegamos o quociente e o resto e convertemos novamente para a base inicial, seja ela binária, octal ou hexadecimal. Exemplo: Efectuar 43A216 / C216 43A216 = 1731410 C216 = 19410 17314 | 194 +---------1552 8 9 , 2 4 7 . . . . . ---1794 1746 ---480 388 ---920 776 ---1440 1358 ---82 Vamos converter agora, 89,247... p/ Hexadecimal. 89,24710 = 59,nnn16 4.5 Aritmética Binária Complementar 4.5.1 Algoritmos para determinação do Complemento Para determinar o complemento binário de um número qualquer, basta todos os zeros por uns, e viceversa e adicionar 1. Na figura abaixo vemos o exemplo para determinar o complemento binário do número 100102. Luís Paulo Reis / 2002 Pág. 19 Representação de Dados e Sistemas de Numeração 4.5.2 Algoritmos para Subtracção A implementação do algoritmo da subtracção em computadores é complexa, requerendo vários testes. Assim, em computadores a subtracção em binário é feita por um artifício. O método utilizado é 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. Os computadores funcionam sempre na base 2, portanto o complemento à base será 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 subtraindo na subtracção (todo 1 vira zero, todo zero vira um); * some 1 ao número em complemento; * some as parcelas (na subtracção, some o minuendo ao subtraendo); * se a soma em complemento acarretar "vai-um" ao resultado (ignore o transporte final); Como exemplo, vamos usar o algoritmo acima na subtracção 1101 - 1100 = 0001 (1) mantém o minuendo ---> 1101 (2) inverte o subtraendo ---> 0011 (3) soma minuendo e subtraendo ---> 10000 (4) soma 1 (5) ignora o "vai-um" ---> 10001 ---> 0001 A tabuada da multiplicação já foi vista anteriormente. No entanto, também 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 subtracções sucessivas! O que concluímos? Que qualquer operação aritmética pode ser realizada em computadores apenas através de somas (directas ou em complemento)! Vamos ver agora, como fazer essa multiplicação através de somas sucessivas. Vamos multiplicar 101 x 100. Lembremos que 1002 = 410. Assim como a multiplicação pode ser feita através de somas sucessivas, a divisão pode ser obtida através de subtracções sucessivas. A divisão será feita com essas subtracções sucessivas até obtermos um resultado zero na subtracção. Veja o exemplo de como dividir 10000 por 1000. O resultado é 210 = 102. Luís Paulo Reis / 2002 Pág. 20 Representação de Dados e Sistemas de Numeração 5 Representação de Dados Em um computador são armazenados e processados apenas dados e instruções. Um programa de computador é formado por uma sequência de instruções que operam sobre um conjunto de dados (os dados são os operandos das instruções - ver capítulo sobre Representação de Instruções). Um computador executa operações sobre dados numéricos (os números) ou alfabéticos (letras e símbolos). Por outro lado, um computador somente opera sobre valores representados em notação binária, isto é, somente "entende" bits - uns e zeros. Assim, os dados precisam ser representados no computador (na memória e no processador) sempre através de bits, de uma forma que o computador possa interpretar correctamente o seu significado e executar as operações adequadas. Em outras palavras, isso significa que é preciso definir uma forma de representar os dados, codificados em uns e zeros, que possam ser interpretados pelo computador, de forma correcta e eficiente (com bom desempenho e pouco consumo de memória). 5.1 Tipos de Dados Um programa (a sequência de instruções) deverá manipular diferentes tipos de dados. Os dados podem ser: *numéricos *ponto fixo (números inteiros) *ponto flutuante (números reais ou fraccionários) *BCD (representação decimal codificada em binário) *alfabéticos *letras, números e símbolos (codificados em ASCII e EBCDIC) O tipo de dado que está sendo fornecido ao programa deverá ser informado pelo programador, através de declarações, fazendo com que o programa interprete o dado fornecido de acordo com a declaração. Por exemplo, na linguagem C, declarações tipo.: int num; (inteiro) ou float sal (real); indicam que a variável num é um número inteiro (int) e a variável sal é um número real (float), representação científica, isto é, representado na forma [(Sinal) Valor x Base (elevada a Expoente)]. Declarações tipo char letra; indicam que a variável é um caractere. 5.2 Dados Numéricos A forma mais intuitiva de representar números seria através da conversão do número decimal para seu correspondente em binário. Como os computadores operam sempre em binário, essa seria a forma mais imediata e eficiente. Os números podem ser positivos ou negativos. Um aspecto primordial a ser definido seria então como representar o sinal. Nesta representação foi definida a utilização de mais um bit na representação (o bit mais representativo), representando o sinal, com a seguinte convenção: bit 0 ==> sinal positivo bit 1 ==> sinal negativo. A seguir, apresentamos exemplos de números e sua representação em binário: Valor Decimal Valor Binário com 8 bits (7 bits + 1 bit de sinal) +9 00001001 - bit inicial 0 => + -9 10001001 - bit inicial 0 => - Luís Paulo Reis / 2002 Pág. 21 Representação de Dados e Sistemas de Numeração +127 01111111 - bit inicial 0 => - -127 1111111 - bit inicial 0 => - Assim, uma representação em binário com n bits teria disponíveis para a representação do número n-1 bits (o bit mais significativo representa o sinal). Essa representação tem o nome de representação em sinal e magnitude. Denomina-se amplitude ou faixa ( range ) de representação num determinado método o conjunto de números que podem ser nele representados. Para o sistema módulo e sinal, a faixa de representação para N dígitos é de: 5.2.1 -2n-1+1 <= X <= 2n-1-1 REPRESENTAÇÃO DE NÚMEROS INTEIROS (PONTO FIXO) Dados numéricos ponto fixo são números inteiros, isto é, sem parte fraccionária. Os dados NUMÉRICOS INTEIROS POSITIVOS são sempre representados com o sinal (convencionado que bit mais significativo 0 = sinal positivo) e em seguida o valor do dado em binário. Porém, devido à complexidade dos algoritmos para os computadores operarem com NÚMEROS NEGATIVOS quando se usa a representação em sinal e magnitude (acima sumariamente apresentada), são comumente adoptadas outras formas que facilitam e tornam mais eficiente a manipulação de operações aritméticas em computadores: as representações em complemento. Vamos analisar cada uma dessas representações. 5.3 REPRESENTAÇÃO EM SINAL E MAGNITUDE A magnitude (isto é, o valor absoluto, que independe de sinal) 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 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) 5.3.1 FAIXA DE REPRESENTAÇÃO n A representação na base b em sinal e magnitude com n bits (incluindo o bit de sinal) possui b representações e permite representar bn -1 valores, de vez que há duas representações para o zero. A faixa de representação de uma representação na base 2 em sinal e magnitude com n bits (incluindo o bit de sinal) possui.: n n-1 n-1 * 2 representações, representando os valores entre - ( 2 -1) e + ( 2 -1). * O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1-1). Luís Paulo Reis / 2002 Pág. 22 Representação de Dados e Sistemas de Numeração Obs1.: o número de bits para a representação é determinado no projecto do computador. Obs2.: em sinal e magnitude, existem duas representações para o zero (00000000 ou 10000000). 5.4 ARITMÉTICA EM SINAL E MAGNITUDE 5.4.1 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 5.4.2 Algoritmo da subtracção O algoritmo da subtracçã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. 5.5 REPRESENTAÇÃO DE NÚMEROS EM COMPLEMENTO Complemento é a diferença entre cada algarismo do número e o maior algarismo possível na base. Uma vantagem da utilização da representação em complemento é que a subtracção entre dois números pode ser substituída pela sua soma em complemento. 5.5.1 REPRESENTAÇÃO DE NÚMEROS POSITIVOS EM COMPLEMENTO A representação de números positivos em complemento não tem qualquer alteração, isto é, é idêntica à representação em sinal e magnitude. 5.5.2 REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A (BASE - 1) A representação dos números inteiros negativos é obtida efectuando-se: (base - 1) menos cada algarismo do número. Fica mais fácil entender através de exemplos: Ex.1: Calcular o complemento a (base - 1) do número 29710. Se a base é 10, então 10-1 = 9 e o complemento a (base -1) será igual a complemento a 9 Ex.2: Calcular o complemento a (base - 1) do número 3A7EH. Se a base é 16, então 10H-1 = F e o complemento a (base -1) será igual a complemento a F. Portanto: Luís Paulo Reis / 2002 Pág. 23 Representação de Dados e Sistemas de Numeração Caso Particular: Números na Base 2 (Complemento a 1) Para se obter o complemento a 1 de um número binário, devemos subtrair cada algarismo de 1. Uma particularidade dos números binários é que, para efectuar esta operação, basta inverter todos os bits. Como exemplo, vamos calcular o complemento a 1 (C1) de um número binário 0011 com 4 dígitos. Portanto, bastaria inverter todos os bits! Vamos analisar como ficaria a representação em C1 dos números binários de 4 dígitos: Decimal(+) Binário(se o nº é (+), não há alteração) Decimal(-) Binário em C1 0 0000 0 1111 1 0001 -1 1110 2 0010 -2 1101 3 0011 -3 1100 4 0100 -4 1011 5 0101 -5 1010 6 0110 -6 1001 7 0111 -7 1000 5.5.3 FAIXA DE REPRESENTAÇÃO n A representação na base b em complemento a (base-1) com n bits possui b representações e permite representar bn -1 valores. Há duas representações para o zero. A faixa de representação de uma representação na base 2 em complemento a (base-1) com n bits é a mesma que em sinal e magnitude e pode ser calculada como: n n-1 n-1 n-1 2 valores, entre - ( 2 -1) e + ( 2 -1) O maior valor inteiro positivo será então + ( 2 -1) e o menor valor inteiro negativo será - ( 2n-1-1). Obs1.: o número de bits para a representação é determinado no projecto do computador. Obs2.: em C1 também existem duas representações para o zero. Vamos verificar qual a faixa de representação nos seguintes exemplos: Base 10 com 3 dígitos: a representação varia de 000 a 999 (103 representações), representando os números de -499 a -1 (faixa negativa), de +1 a +499 (faixa positiva). Base 10 Faixa Inferior (+) C1 1,2,3,...,497,498,499 500,501,...996,997,998 Faixa Superior (-) Número Representado 1,2,3,...,497,498,499 -499,-498,...,-3,-2,-1 O zero pode ser representado tanto por 000 quanto por 999. Base 16 com 4 dígitos: a representação varia de 0000 a FFFF, representando os números de -7FFF a 0001 (faixa negativa) e de +0001 a +7FFF (faixa positiva). Base 16 Faixa Inferior (+) C1 0001,0002,...,7FFE,7FFF 8000,8001,...,FFFD,FFFE Faixa Superior (-) Número Representado 0001,0002,...,7FFE,7FFF -7FFF,-7FFE,...,-0002,-0001 Luís Paulo Reis / 2002 Pág. 24 Representação de Dados e Sistemas de Numeração Obs: Podemos concluir que, tal como na representação em sinal e magnitude, sempre que em uma representação em complemento o primeiro dígito binário for 1, o número representado é negativo! Mas é importante notar que o bit mais significativo, na representação em complemento, ao contrário do que ocorre na representação em sinal e magnitude, NÃO REPRESENTA O SINAL DE NEGATIVO! 5.5.4 ARITMÉTICA EM COMPLEMENTO A (BASE - 1) Na aritmética em complemento a (base-1), basta somar os números, sendo que um número negativo estará representado por seu complemento. Ex.: Somar + 123 com - 418 (decimal). Verificamos que o resultado 704 (C9) é um número negativo, isto é, o complemento a 9 (base 10 -1) de 295. Repare que a subtracção (ou soma de um número positivo com um número negativo) se transforma, nesta representação, em uma soma em complemento, isto é, a soma dos complementos do número positivo com o número negativo! Portanto, numa subtracção (realizada através de soma em complemento), se o número é positivo, mantenha-o; se o número é negativo, complemente-o; e aí, é só somar! Dessa forma, podemos constatar que o algoritmo da soma em complemento é muito mais simples que o da soma em sinal e magnitude, de vez que não requer nenhum teste. No entanto, continuamos com duas representações para o zero. Vamos a seguir discutir a solução para esse problema. 5.5.5 REPRESENTAÇÃO DE NÚMEROS NEGATIVOS EM COMPLEMENTO A BASE A representação dos números inteiros negativos em complemento a base é obtida subtraindo-se da base cada algarismo do número. Ora, seria a mesma coisa subtrair cada algarismo de (base-1), isto é, calcular o complemento a (base -1) e depois somar 1 ao resultado, ou seja: b - N = [(b-1) - N] + 1. Ou seja, encontramos o complemento a (base-1) do número (o que facilita muito no caso dos números binários) e depois somamos 1 ao resultado. Fica mais fácil entender através de exemplos: Ex.1: Calcular o complemento a base do número 29710. Se a base é 10, o complemento a base será igual a complemento a 10. Ex.2: Calcular o complemento a base do número 3A7Eh. Se a base é 16 (lembremos mais uma vez que o H ou h depois do número simboliza "hexadecimal"), o complemento a base será igual a complemento a 1610 ou 10h. Portanto, calculando o complemento a base dos números acima, temos: Caso Particular: Números na Base 2 (Complemento a 2) Para se obter o complemento a 2 de um número binário, a regra geral nos diz para subtrair cada algarismo de 2. Ora, seria a mesma coisa subtrair cada algarismo de 1 (complemento a 1) e depois somar 1 ao resultado, ou seja: (2-N) = (1-N) + 1. Assim, tirando partido da particularidade dos números binários anteriormente apresentada (para obter o C1 de um número binário, basta inverter todos os bits), para obter o C2 de um número obtemos primeiro o C1 (invertendo os bits) e depois somamos 1 ao resultado. Como exemplo, vamos calcular o complemento a 2 (C2) de um número binário 0011 com 4 dígitos. Luís Paulo Reis / 2002 Pág. 25 Representação de Dados e Sistemas de Numeração Vamos analisar como ficaria a representação em C2 dos números binários de 4 dígitos: Decimal(+) Binário(se o nº é (+), não há alteração) Decimal(-) Binário em C2 0 0000 -1 1111 1 0001 -2 1110 2 0010 -3 1101 3 0011 -4 1100 4 0100 -5 1011 5 0101 -6 1010 6 0110 -7 1001 7 0111 -8 1000 Vemos assim que em C2, não há duas representações para o valor 0 e consequentemente abriu-se lugar para mais uma representação - no caso, mais um número negativo pode ser representado. 5.5.6 FAIXA DE REPRESENTAÇÃO n A representação na base b em complemento a base com n bits possui b representações e permite representar bn valores. A faixa de representação de uma representação na base 2 em complemento a base com n bits pode ser calculada como n n-1 2 valores (entre - 2 n-1 e + 2 -1), sendo 2 a base. O maior valor inteiro positivo será então + ( 2n-1-1) e o menor valor inteiro negativo será - ( 2n-1). Obs1.: o número de bits para a representação é determinado no projecto do computador. Obs2.: nesta representação somente existe uma representação para o zero e há mais um número negativo representado! Nos exemplos acima, vamos verificar qual a faixa de representação: Base 10 com 3 dígitos: de 0 a 999 (103 valores), representando de -500 a -1 (faixa negativa) e de 1 a +499 (faixa positiva). O zero tem apenas uma representação: 000. Base 10 Faixa Inferior (+) Faixa Superior (-) C2 1,2,3,...,497,498,499 500,501,...,998,999 Número Representado 1,2,3,...,497,498,499 -500,-499,...,-3,-2,-1 Base 16 com 4 dígitos: de 0 a FFFF, representando -8000 a -1 (faixa negativa) e de 0 a +7FFF (faixa positiva). O zero tem apenas uma representação: 0000. Base 16 Faixa Inferior (+) Faixa Superior (-) C1 0001,0002,...,7FFE,7FFF 8000,8001,...,FFFD,FFFE Número Representado 0001,0002,...,7FFE,7FFF -8000,-7999,...,-0002,-0001 Obs: Podemos concluir que, tal como na representação em sinal e magnitude e em complemento a (base-1), sempre que em uma representação em complemento a base o primeiro dígito binário for 1, o número representado é negativo! Mas é importante notar que o bit mais significativo, na representação em complemento, ao contrário do que ocorre na representação em sinal e magnitude, NÃO REPRESENTA O SINAL DE NEGATIVO! Luís Paulo Reis / 2002 Pág. 26 Representação de Dados e Sistemas de Numeração Exercício 1 – Sistemas de Numeração e Conversões de Base 1) Qual o binário equivalente a sua idade? Quais seus equivalentes em octal(8), decimal(10) e hexadecimal(16)? 2) Qual o maior binário que pode ser representado por uma série de 16 bits? Quais seus equivalentes em octal(8), decimal(10) e hexadecimal(16)? 3) Considerando o sistema sexagesimal (base 60), que é o mesmo que utilizamos para as horas, qual o maior algarismo que podemos representar neste sistema de numeração? 4) Qual a base de um sistema de numeração que possui os seguintes algarismos? a) (0,1,2,3,4,5,6).: b) (0,1,2,3,4,5,6,7,8).: c) (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E).: d) (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I).: 5) Efectue as seguintes conversões.: a) 10110010012 => n8 b) 10110010012 => n16 c) F5C316 => n2 d) 36718 => n2 e) F5C316 => n8 f) 36718 => n16 g) 10110010012 => n10 h) 36718 => n10 i) F5C316 => n10 j) 1100101,1112 => n10 k) 4527,58 => n10 l) F5C3,B16 => n10 m) 1100101,1112 => n10 n) 4527,58 => n10 o) F5C3,B16 => n10 p) 45759 => n10 q) 451810 => n2 r) 157810 => n8 s) 381710 => n16 t) 754110 => n5 6) Converta para base 10 os seguintes números: a. b. c. d. 1001012 7608 32104 101111002 7) Converta para base 2 os seguintes números, representados em base 10: a) 255 b) 2 c) 12 d)16 e) 9 f) 32 g) 8 8) Do exercício anterior consegue inferir alguma regra para: a) Representação de potências naturais de 2? b) Representação de números pares e ímpares? 9) Represente em binário os números: a) 512 + 13 b)27 + 25 + 4 10) Realize as seguintes conversões: a) b) c) d) e) f) 1010012 para hexadecimal; 30010 para hexadecimal; F0916 para binário; 100B16 para decimal; EDC16 para decimal; 1000111012 para hexadecimal; Luís Paulo Reis / 2002 Pág. 27 Representação de Dados e Sistemas de Numeração Exercícios - Representação de Dados e Aritmética Binária e Complementar 1) Efectue as seguintes adições em binário: a) 101101001 + 100101101.: b) 011001111 + 011101110.: c) 110011100 + 101101110 + 011001101.: d) 11001 + 00110 e) 010101 + 001011 f) 1011 + 1101 g) 10011111 + 1100001 (usando apenas 8 bits) 2) Efectue as seguintes subtracções em binário: a) 101101001 - 100101101.: b) 011101110 - 011001111.: c) 110011100 - 101101110.: 3) Efectue as seguintes multiplicações em binário: a) 101101001 * 110.: b) 011101110 * 11.: c) 110011100 * 101.: 4) Efectue as seguintes divisões em binário: a) 101101001 / 1101.: b) 011101110 / 110.: c) 110011100 / 1010.: 5) Usando a representação em Sinal e Magnitude com 8 bits, represente os seguintes números: a) +50.: b) -45.: c) +63.: d) -98.: e) 0 (Duas representações).: 6) Usando a representação em Complemento a Base - 1, represente os seguintes números: a) +50.: b) -45.: c) +63.: d) -98.: e) 0 (Duas representações).: 7) Usando a representação em Complemento a Base, represente os seguintes números: a) +50.: b) -45.: c) +63.: d) -98.: e) 0 (Uma representação).: 8) Represente os números nas várias representações binárias possíveis, e com o menor número de bits: a) –120 b) –25 c) –58 d) 33 9) Realize em binário as seguintes operações aritméticas, usando sempre 8 bits, se possível: a) 121-47 b) 100+12 c) 12-100 d) -12-(-100) e) 200-55 f) 120-120 10) Calcule o itens abaixo propostos, sabendo que a representação utilizada é a de sinal e magnitude.: a) 001101001 + 110100100 b) 001101001 + 010100100 c) 101101001 + 110100100 11) Calcule o itens abaixo propostos, sabendo que a representação utilizada é a de Complemento a Base - 1.: a) 001101001 + 110100100 b) 001101001 + 010100100 c) 101101001 + 110100100 12) Calcule o itens abaixo propostos, sabendo que a representação utilizada é a de Complemento a Base.: a) 001101001 + 110100100 b) 001101001 + 010100100 c) 101101001 + 110100100 Luís Paulo Reis / 2002 Pág. 28 Representação de Dados e Sistemas de Numeração Tabela para auxílio nos cálculos de conversões Binário Octal Decimal Hexadecimal Número \ -4 Potência 0 0 0 0 1 1 1 1 10 2 2 2 11 3 3 3 100 4 4 4 101 5 5 5 110 6 6 6 111 7 7 7 1000 10 8 8 1001 11 9 9 1010 12 10 A 1011 13 11 B 1100 14 12 C 1101 15 13 D 1110 16 14 E 1111 17 15 F -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 0,0625 0,1250 0,2500 0,5000 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 3 0,0123 0,0370 0,1111 0,3333 1 3 9 27 81 243 729 2187 6561 19683 4 0,0039 0,0156 0,0625 0,2500 1 4 16 64 256 1024 4096 16384 5 0,0016 0,0080 0,0400 0,2000 1 5 25 125 625 3125 15625 6 0,0007 0,0046 0,0277 0,1666 1 6 36 216 1296 7776 7 0,0029 0,0204 0,1428 1 7 49 343 2401 16807 8 0,0019 0,0156 0,1250 1 8 64 512 4096 32768 9 0,0013 0,0123 0,1111 1 9 81 729 6561 10 0,0010 0,0100 0,1000 1 10 100 1000 10000 11 0,0082 0,0909 1 11 121 1331 14641 12 0,0069 0,0833 1 12 144 1728 20736 13 0,0059 0,0769 1 13 169 2197 28561 14 0,0051 0,0714 1 14 196 2744 38416 15 0,0044 0,0666 1 15 225 3375 50625 Luís Paulo Reis / 2002 Pág. 29