Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
1 SistemasdenumeraçãoUtilizaranotaçãodecimalé interessanteparanóssereshumanos,principalmentepela
associação com o número de dedos. Porém para o computador a manipulação de dadosatravésdessanotaçãoéatualmenteinviável,eporisso,ocomputadorutilizaarepresentaçãodeinformaçãoatravésdanotaçãobinária(doisestados:ligadooudesligado,0ou1).
1.1 SistemadenumeraçãodecimalEstamos tão acostumados com a representação de valores no formato decimal que
passadespercebidoaformacomosãocompostos,porexemplo,onúmero456éacombinaçãode:
6 x unidades(peso1ou100) 5 x dezenas(peso10ou101) 4 x centenas(peso100ou102)Ououtraformaderepresentaçãoéatravésdopesodascasas:Valor 4 5 6Peso 106 105 104 103 102 101 100
Resultado 400 50 6Somando-seosresultados:
400+50+6=456
Pareceumabrincadeira,maslembre-sequejáestamosacostumadoscomessesistema
denumeraçãoejásabemoscomorepresentarele.
1.2 SistemadenumeraçãobinárioA codificação utiliza pelo computar possui apenas dois estados possíveis, com isso a
tabeladepesosutilizaabase2,ecomopodemosterapenasosvalores0e1nascasas,vamosfazer a demonstração de quanto vale o número 11100102 (perceba o 2 subscrito após onúmero,elerepresentaemqualbaseseestáapresentadoonúmero)
Valor 1 1 1 0 0 1 0Peso 26=64 25=32 24=16 23=8 22=4 21=2 20=1Resultado 64 32 16 0 0 2 0
Somandoosresultados:
64+32+16+0+0+2+0=11410
Atividade:
Convertaosseguintesnúmerosdebinárioparadecimal:
a) 10010012b) 110011112c) 11110011112d) 111110002e) 10000000002
f) 10011110002g) 11000110012h) 110000102i) 111111112j) 110000002
1.2.1 ConvertendodedecimalparabinárioO processo de conversão de decimal para binário pode ser feito de duas formas, de
formaaexemplificarosprocessosvamosconverteronúmero35110parabinário:
Método1–Dividindoonúmeropor2sucessivamente
351 2175 2350
1 350 87 28611
43 2421
21 2201
10 2100
5 241
2 220
1
Utilizandoosresultadosdetrásparafrente:
35110=1010111112
Método2–Subtraçãodopesodascasas
Nessemétodo,precisoverificarsepossosubtrairovalordonúmeropelopesodacasa,casopositivo,acrescento1(um)asaídaeorestodasubtraçãoéenviadaparaapróximacasa.Seonúmeroémenorqueopesodacasa,acrescento0(zero)paraasaídaecontinuoomesmonúmeronovalordapróximacasa.
Valor 351–256= 95 95-64= 31 31-16= 15-8= 7-4= 3-2= 1-1=0Peso 29=512 28=256 27=128 26=64 25=32 24=16 23=8 22=4 21=2 20=1Saída 1 0 1 0 1 1 1 1 1
Novamentechegamosaoresultado:
35110=1010111112
Atividade:
Utilizandoqualquerumdosmétodosestudados,façaaconversãodedecimal
parabinário:
a) 199010b) 102410c) 109510d) 97410e) 56410f) 51210
g) 6410h) 23110i) 55510j) 204810k) 12210l) 25510
1.3 SistemadenumeraçãooctalParanóshumanos,entenderumasequênciade0e1éconfusoefazeraconversãode
binário para decimal exige certo cálculos para se obter o valor, de forma a simplificar avisualizaçãodesequênciasdebitssãoutilizadosoutrosmétodosesistemadenumeração.Umdeleéooctal,queutilizaosnúmerode0a7,totalizando8possíveiscombinaçãoporcasa.
1.3.1 ConversãodeoctalparadecimalPara converter um número em octal para decimal utilizamos o processo de casas e
pesos,porexemplo,paraconverteronúmero7538paradecimalfizemos:
Valor 7 5 3Peso 85=32.768 84=4096 83=512 82=64 81=8 80=1Resultado 7x64=448 5x8=40 3x1=3
Oresultadoserá:
448+40+3=49110
Atividade:
Convertaosnúmerosdabaseoctalparadecimal
a) 7778b) 10008c) 6538
g) 2418h) 2318i) 5558
d) 27308e) 5128f) 32768
j) 10248k) 1228l) 2558
1.3.2 ConversãodedecimalparaoctalPara converter um número em decimal para octal, utilizamos o processo de divisão
sucessivaspor8.
Vejaumexemplo,paraconverteronúmero89710paraoctal
897 88961
112 81120
14 886
1
Oresultadoé16018
Atividade:
Convertaosnúmerosemdecimalparaseuequivalenteemoctal.
a) 102410b) 100010c) 409510d) 273010e) 51210f) 327610
g) 24110h) 23110i) 55510j) 204810k) 12210l) 25510
1.3.3 ConvertendodebinárioparaoctalO real motivo de se utilizar o sistema de numeração octal deve-se a forma de
representarosnúmerosembinário.Porissoosistemadeconversãoésimples,porémanteseinteressanteconheceronúmeroemoctaleseequivalenteembinário.
Tabela1-Equivalênciaoctal-binária
Octal Binário0 0001 0012 010
3 0114 1005 1016 1107 111
Combasenessa tabela, basta apenasagrupar a cada trêsbitsonúmeroembinárioeverificarseuequivalenteemoctal,casonecessáriopodemospreenchercomzerosaesquerdanossonúmeroembinário.
Vejaoexemplo,paraconverteronúmero11001110112paraoctal:
1100111011}}}}
3741
Resultado:11001110112=14738
Atividade:
Convertaosseguintesnúmerosdebinárioparaoctal:
a) 1110010012b) 11001001112c) 11100112d) 111110002e) 11100000002
f) 101100011102g) 111000001111002h) 1101010112i) 111111112j) 1110001110001112
1.3.4 Conversãodeoctalparabinário.Para a conversão de octal para binário o processo é o inverso daquele apresentado
anteriormente,utilizandoaTabela1utiliza-seaequivalênciadonúmeroemoctal
Paraexemplificar,vamosconverteronúmero47328parabinário:
100111011010
4732 }}}}
Oresultadodaconversão:1001110110102
Atividade:
Convertaosseguintesnúmerosdeoctalparabinário:
a) 100008b) 5518c) 2558d) 10248e) 70128
f) 4448g) 378h) 108i) 1778j) 30078
1.4 SistemadenumeraçãohexadecimalDe uma forma parecida ao sistema octal, o hexadecimal é utilizado para melhor
visualizarumasequenciadebits,sendoinclusivemuitomaisutilizadoqueooctal.Deformaacompletaralistacom16símbolos,apóso9seiniciaautilizaçãodeletras,começandonoAatéoF,essaequivalênciaévistanaTabela2
Tabela2-EquivalênciaDecimal-Hexadecimal
Decimal Hexadecimal0 01 12 23 34 45 56 67 78 89 910 A11 B12 C13 D14 E15 F
1.4.1 Conversãodehexadecimalparadecimal.Para a conversão utilizamos o sistema de casas agora com a base 16. Para exemplo,
vamosconverteronúmeroA5D(percebaasubstituiçãodaletrapelaseuequivalentedecimal)
Valor A 5 DPeso 164=65536 163=4096 162=256 161=16 160=1Resultado 10x256=2560 5x16=80 13x1=13
Resultado=2560+80+13=265310
Atividade:
Convertaosseguintesnúmerosdehexadecimalparadecimal:
a) E5B16b) FFF16c) 100016d) 1A16e) AFF16
f) 111116g) CDE16h) 99916i) 11FF16j) FAF16
1.4.2 ConversãodedecimalparahexadecimalOprocessoocorrepordivisão,semprecuidandoparaocasodorestoformaiorque10
devesersubstituídopelosualetraequivalente.
Convertendoonúmero1205910paraabasehexadecimal:
12059 1612048(B)11
753 1647752
116232
(F)15
Resultado=2F1B16
Atividade:
Convertaosnúmerosemdecimalparaseuequivalenteemhexadecimal.
m) 102410n) 100010o) 409510p) 273010q) 51210r) 327610
s) 24110t) 23110u) 55510v) 204810w) 12210x) 25510
1.4.3 ConversãodehexadecimalparabinárioA conversão entre essas bases segue omesmo raciocínio da conversão entre octal e
binário,porémcom4casas,queéaquantidadedecasasnecessáriapara representaros16símbolosemhexadecimal.
Hexadecimal Binário Hexadecimal Binário0 0000 8 10001 0001 9 1001
2 0010 A 10103 0011 B 10114 0100 C 11005 0101 D 11016 0110 E 11107 0111 F 1111
Aconversãoaconteceagrupandoosbinárioemgrupode4everificandoseuequivalenteemhexadecimal,oprocessoinversotambéméválido.
Porexemplo,paraconverteronúmero1011110101012parahexadecimal:
101111010101}}}B D 5
Ede1F816parabinário:
111111000
}}}1 F 8
Atividade:
Convertaosnúmerosdehexadecimalparabinário
a) F0F16b) 100016c) F116d) B0016e) 102416f) CD16
g) FFFF16h) 999916i) 1A16j) 204816k) F2216l) 51216
Atividade:
Convertaosnúmerosdebinárioparahexadecimal
a) 1111100010012b) 110011100112c) 11111111112d) 1111100002e) 11110000111100002
f) 101100011102g) 111000001111002h) 1101010112i) 111111112j) 1110001110001112
2 ManipulaçãoeorganizaçãodosdadosCada computador possui um tamanho da palavra (word size) que indica o tamanho
nominal dos números inteiros e apontadores de dados. Como um endereço virtual érepresentadopelacomoumapalavra,otamanhodapalavradeterminaotamanhomáximodoendereçamentodamemóriavirtual.
Noscomputadorespessoaisopadrãoé32bits/64bits,comumsistemaquetem32bitsdo tamanho da palavra, o tamanho máximo de memória é de 232 = 4GB1. Enquanto nossistemasde64bitsesselimiteéiguala264=16HB(17.179.869.184GB)
2.1 TamanhodosdadosComputadoresecompiladores suportamvários formatosdedados,utilizandodiversas
formaspararepresenta-los,porexemplo,inteiroseflutuantes,bemcomodiferenteslarguras.Por exemplo,muitasmáquinas tem instruçõesparamanipularbytes simples, como tambéminteirosrepresentadospor2,4ou8bytes.
ATabela3apresentaaquantidadedebytesutilizadosporalgunstiposdedadosemCeacapacidadedearmazenar.
Tabela3-TamanhodealgunstiposemC
DeclaraçaoemC Bytes Valorespossíveischar 1 –128até127shortint 2 –32,768até32,767int 4 –2,147,483,648até2,147,483,647longint 4 –2,147,483,648até2,147,483,647float 4 3.4E+/-38(7digitos)double 8 1.7E+/-308(15digitos)
Fonte:CPlusplus2
2.2 EndereçamentoeordemdeBytesOs programas que utilizam vários bytes para armazenar dados, precisar de duas
informações:qualoendereçodearmazenamentoequalaordemdosbytesnamemória.Paradados armazenados em vários bytes, geralmente uma sequência de bytes contínuos éreservadoparaessedado.Oendereçodadoéobyteinicial,porexemplo,seumavariávelxéarmazenadanoendereço0x100,ovalordaexpressão&xé0x100.Portantoosquatrobytesdavariávelxsãoarmazenadosnosendereços0x100,0x101,0x102e0x103.
A ordem dos bytes é a forma como os dígitos serão armazenamentos no espaço dememória,podendoiniciarpelomaissignificativo(bigendian)oupelomenossignificativo(littleendian)3.Exemplosdearquiteturaquesão littleendian incluem:x86(inclusivex86-64),6502
1 Alguns sistemas na prática reconhecem apenas 3GB, para entender isso pesquise por “3 GB
barrier”2http://www.cplusplus.com/doc/tutorial/variables/3Protocolosseriaistambémsãoclassificadosquantoaordemdeenviodasinformações.
USB,RS-232,RS-422eRS-485sãoexemplosdepadrõesseriaisdotipolittleendian
(inclusive 65802, 65C816), Z80 (inclusive Z180, eZ80 etc.),MCS-48, 8051, DEC Alpha, AlteraNios,AtmelAVR,SuperH,VAX,ePDP-11.
Nossa formade representar númeroé equivalente aobig endian, onde começamos arepresentar um número com omaior peso primeiro e a esquerda. Algumas arquitetura bigendian são: Motorola 6800 e 68k, Xilinx Microblaze, IBM POWER, System/360 e seussucessoresSystem/370,ESA/390,ez/Architecture.
Ainda há um conjunto de arquitetura que a ordem dos bytes pode configurado nomomento de inicialização, denominadas bi-endian. São exemplo de arquitetura bi-endianARM,PowerPC,Alpha,SPARCV9,MIPS,PA-RISCeIA-64.
Aseguirsegueumexemplodearmazenamentodovalor0x0A0B0C0DnasformasBigeLittleEndian:
0x103 0D0x102 0C0x101 0B0x100 0AFigura1-BigEndian
0x103 0A0x102 0B0x101 0C0x100 0DFigura2-LittleEndian
2.3 RepresentandostringString em C é codificado como uma sequência de caracteres terminada pelo caracter
nulo (valor0).Cadacaracteréumnúmero inteiroconvertidoatravésdeumadefiniçãoparaumcaracter.AtabelamaisutilizadaéaASCII,queapresentaaequivalênciadeváriossímbolosparaobinário,porexemploastring“arquitetura”serárepresentadaconformemostraaFigura3,percebaqueocomputadoriráarmazenarovalorembinário.
Caracter a r q u i t e t u r a
Decimal 97 114 113 117 105 116 101 116 117 114 97
Binário 1100001 1110010 1110001 1110101 1101001 1110100 1100101 1110100 1110101 1110010 1100001
Hexadecimal 61 72 71 75 69 74 65 74 75 72 61Figura3-Representaçãodecaracteres
Desafio:
ProgrameumprogramaemCquerecebaumastringeconvertaoscaracteresparabinário,decimalehexadecimal.
2.4 RepresentaçãodeinteirosExistemdiversasformasderepresentarumnúmerointeiro,aprincípioocomputadoré
capazdearmazenar inteirospositivos apenas,porém, comoproceder seprecisar armazenarumnúmeronegativo?Essecapítuloirátratardessasformasderepresentação
2.4.1 CodificaçãodeinteirossemsinalAssumimos que armazenamos um inteiro com a largura ω, o vetor que contêm os
valoreschamaremosdeň,umasequênciadebitsqueseráconvertidoparainteirosemsinal.Aequaçãoquetranscreveaformadeconversãoéapresentadoaseguir:
𝐼!! = ň 𝑖 ×2!!!!
!!!
2.4.2 Codificaçãodeinteiroscomsinal4Pararepresentarumnúmerocomsinaloprocessomaiscomuméocomplementode2.
Ele utiliza obitmais significativodapalavra como sinal. A expressãoquedefine a formadeconversãoé:
𝐼!" = − ň ω − 1 ×2!!! + ň 𝑖 ×2!!!!
!!!
Porexemplo,qualonúmeroemdecimalrepresentadopelonúmero110110102,percebaquealarguradovetoré8:
Valor 1 1 0 1 1 0 1 0Peso 27=128 26=64 25=32 24=16 23=8 22=4 21=2 20=1Resultado 128 64 0 16 8 0 2 0
-(128)+64+16+8+2=-38
Atividade:Converta os seguintes números binários para decimal com sinal e sem sinal,paratodosotamanhodearmazenamentoé8.
a) 100000012b) 111111112c) 100000002d) 111100002e) 10101012
f) 100000012g) 110010002h) 111111102i) 11111112j) 100111012
Atividade:
4 Fim do mundo para o Linux e similares, um problema de limitação na variável de
armazenamento da data nos sistemas com padrão POSIX podem causar problemas, o fim será as03hrs14min07segde19deJaneirode2038.Paramaioresdetalhesprocurepor“Bug2038”
Converta os seguintes números negativos para binário, o limite dearmazenamentoé8bits.
a) -110b) -10010c) -210d) -6410e) -1610
f) 12710g) -9910h) -2210i) -12010j) -12810
Atividade:
Identifiqueovalordavariáveluxeexpliqueoresultado.int x = -1; unsigned ux = (unsigned) x;
A linguagem C considera os números inteiros como com sinal, com isso algumasconversõesproduzemresultadosinesperados.
Atividade
Verifiqueascomparaçõesabaixoverificandoquaisnãocondizemcomoesperadoejustifiqueadiferença(sãotrêsoscasosquenãocondizemcomoesperado):
Expressão Saídaesperada Inesperado?
0==0U Verdadeiro-1<0 Verdadeiro-1<0U Verdadeiro2147483647>-2147483648 Verdadeiro2147483647U>-2147483648 Verdadeiro2147483647>(int)2147483648U Verdadeiro
2.5 PontoflutuanteOpontoflutuanteéumaformaderepresentarnúmerosnaformaracional(envolvendo
frações). A padronização dos números em ponto flutuante em 1985 garantiu ahomogeneidade da representação e cálculos desse tipo de número. Antes disso, cadafabricante adotava uma forma própria de representar e tambémde operar,muitas vezes ofator precisão era deixado em segundo plano em favor de um melhor desempenho doscálculos.
2.5.1 NúmerosfracionáriosbináriosNanossaformanormaderepresentaçãodenúmerosfracionáriosdecimais,utilizamoso
sistemadepesotambémno ladodireitodavírgulaqueseparaaparte inteiradafracionária.Porexemplo,onumero12,345seriarepresentadoassim:
Valor 1 2 3 4 5 Peso ... 101 100 10-1 10-2 10-3 ...
Resultado 10 2 0,3 0,04 0,005
Oresultadoseriaasomadosresultados,ounaformamatemática:
𝐷 = 10!×𝑑[𝑖]!
!!!!
OndeDseriaonúmerodecimalfinal,maquantidadedecasasinteiras,nonúmerodecasasfracionárias,ed[i]apartedonúmerodecimalnacasai.
Por analogia, considere agora essa forma para representar o sistema binário, com omesmoprincípiodecasasepesos.Porexemplo,vamosrepresentaronúmero101.112
Valor 1 0 1 1 1 Peso ... 22=4 21=2 20=1 2-1=1/2 2-2=1/4 ...Resultado 4 0 1 1/2 1/4
Resultado = 5 !!
Arepresentaçãomatemáticaé:
𝐵 = 2!×𝑏[𝑖]!
!!!!
Porémessaformaderepresentarnúmerosfracionáriostemproblemasdeprecisão56,porexemplo,pararepresentaronúmero0,2(1/5),nãoháformasprecisãoderepresentação,conformemostradonaTabela4.
Tabela4-aproximaçãode1/5
Representação Valor Decimal0,012 1/4 0,25100,00112 3/16 0,1875100,0011012 13/64 0,203125100,001100112 51/256 0,1992187510
2.5.2 RepresentaçãodepontoflutuantedeacordocomaIEEECom o padrão IEEE 754 de 1985, baseada num pequeno e consistente conjunto de
princípiostornouarepresentaçãoemnúmeroempontoflutuanteeleganteeentendível.
AIEEE754representaumnúmeronoformatoV=(-1)SxMx2eonde:
• S:sinaldonúmero,negativoédefinidoporS=1oupositivoS=05UmfatocuriososobreessaproblemaderepresentaçãofoinaguerradoGolfo,parasabermais
detalhespesquisenumsitedebuscapor“erroarredondamentomíssilPatriot”.6 Ainda podemos verificar problemas de arredondamento no Excel, para isso numa célula
qualquerinsiraaequação=(0,5-0,4-0,1).Oresultadodeveriaser0.
• M:Mantissa,éarepresentaçãodapartefracionária• e:expoentedabase.
A IEEE 754 padroniza o formato em dois tamanhos, o ponto flutuante de Precisãosimples e o de Precisão dupla. Cada um com diferentes tamanhos de campos conformeapresentadorespectivamentenasfigurasFigura4Figura5
bits 1 8 23
+- Expoente Mantissa
Figura4-Pontoflutuantedeprecisãosimples
bits 1 11 52
+- Expoente Mantissa
Figura5-Pontoflutuantedeprecisãodupla
Oexpoenteédefinidoatravésdocalculocomobias,essenúmeroéobtidoatravésdonúmerodebitsnoexpoentecomafórmula2k−1–1.Paraocasodeprecisãosimples,obiasé28−1–1=127.Paraopontoflutuantedeprecisãodupla,211−1–1=1023.
2.5.3 Convertendoumnúmerofracionáriodecimalparabinário7De forma a exemplificar a conversão, vamos considerar uma definição própria do
tamanho do ponto flutuante, o sinal será de 1 bit, o expoente de 3 bits (bias igual a 3) emantissa de 4 bits, totalizando 8 bits para armazenar o número que será nosso exemplo:2,625:
1. Paraaparteinteira,realiza-seaconversãonormaldedecimalparabinário:210=102
2. Paraapartefracionária,faz-sesucessivasmultiplicaçõesdapartefracionáriapor2:
0,625×2=1,25 1 Retiraonúmerointeiroecontinuaaconta0,25 ×2=0,5 0 Gerou0,continuando...0,5 ×2=1,0 1 Gerou1erestou0,paraaqui.
Portanto,0,62510=0,1012
3. Juntandoaparteinteiraeapartefracionária,temos10.10124. Adicionandooexpoente:10.1012×205. Normalizando:10.1012×20=1.01012×21(verifiquequefoideslocadooponto
decimalumacasaparaadireita,porisso,oexpoenteaumentouumacasa).6. Mantissa:01017. Expoente:1+3=410=10028. Bitdesinalpositivo:09. Resultadoé01000101,emhexadecimal4516
7Formadeconversãoretiradodehttp://sandbox.mc.edu/~bennet/cs110/flt/dtof.html
Vamosparaoutroexemplo,converteronúmero-39887.5625paraoformatoIEEE754deprecisãosimples:
1. Aparteinteira:3988710=100110111100111122. Afração0,562510=0,10012
0,5625×2=1,125 1 Generate1andcontinuewiththerest.0,125 ×2=0,25 0 Generate0andcontinue.0,25 ×2=0,5 0 Generate0andcontinue.0,5 ×2=1,0 1 Generate1andnothingremains.
3. Aconversãocompleta:39887,562510=1001101111001111,100124. Normalizando:1001101111001111,10012=1,00110111100111110012×215.5. Mantissa é 00110111100111110010000, o expoente é 15 + 127 = 142 =
100011102,bitdesinalé1.6. Portanto39887,5625é11000111000110111100111110010000=C71BCF9016
2.5.4 Convertendoumnúmerofracionáriobinárioparadecimal.Oprocessoinverso,paraconverterC4A42A0016paradecimal,atravésdanormativaIEEE
deprecisãosimples:
1. Convertendo:C4A42A0016=1100010010100100001010100000000022. Sinal:1=negativo3. Expoente:100010012=137–127(bias)=104. Mantissa:010010000101010000000002=0,28253173828125105. Aplicandoamantissaeoexpoente=1,28253173828125x210=-1313,312510
Atividade:Converta os seguintes números fracionários em decimal para binário,utilizando a formatação de 8 bits de ponto flutuante (1 bit de sinal, 3 deexpoentee4demantissa)
a) 1,810b) 5/32
c) -1,2510d) 0,7510
Atividade:Converta os seguintes números fracionários em decimal para binário,utilizandoaformataçãode32bitsdepontoflutuantedaIEEE
a) 1,810b) 5/3210c) -1,2510d) 0,7510
e) 1/910f) -1/510g) 0,110h) 1,9910
Atividade:
Converta os seguintes números fracionários em hexadecimal para decimal,utilizandoaformataçãode32bitsdepontoflutuantedaIEEE
a) 42E4800016b) 3F88000016c) 40490FDB16
d) 0080000016e) C7F0000016f) C02DF85516