Baixe o app para aproveitar ainda mais
Prévia do material em texto
Apêndice A Tabela de precedência dos operadores Os operadores são apresentados em ordem decrescente de precedência, de cima para baixo. Fig. A.1 Tabela de precedência de operadores (parte 1 de 2). o e e [e Operador Tipo Associatividade 1 . resolução de escopo binário resolução de escopo unário esquerda para a direita O parênteses esquerda para a direita [] subscrito de array . seleção de membro via objeto -> seleção de membro via ponteiro ++ - pós-incremento unário pós-decremento unário typeid informação sobre tipo durante a execução dynainic_cast< tipo> coerção com verificação de tipo durante a execução staticcast< tipo> coerção com verificação de tipo durante a compilação reinterpretcast< tipo> coerção para conversões não-padrão constcast< tipo> retira o atributo const com coerção ++ pré-incremento unário direita para a esquerda - - pré-decremento unário + mais unário - menos unário ! negação lógica unária - complemento sobre bits unário tipo ) coerção ao estilo de C unário sizeof determina o tamanho em bytes & endereço * derreferencia new alocação dinâmica de memória new [3 alocação dinâmica de array delete desalocação dinâmica de memória dele te [3 desalocação dinâmica de array * ponteiro para membro via objeto esquerda para a direita ponteiro para membro via ponteiro * multiplicação esquerda para a direita / divisão % módulo (resto da divisão inteira) + adição esquerda para a direita - subtração 1036 C++ COMO PROGRAMAR « » < <= > > & A && II *- 1= &= «= »= deslocamento sobre bits para a esquerda deslocamento sobre bits para a direita relacional menor do que relacional menor do que ou igual a relacional maior do que relacional maior do que ou igual a relacional igual a relacional não igual a AND (E) sobre bits OR (OU) exclusivo sobre bits OR (OU) inclusivo sobre bits AND (E) lógico ___________________ OR (OU) lógico ___________________ condicional ternário atribuição atribuição com adição atribuição com subtração atribuição com multiplicação atribuição com divisão atribuição com módulo atribuição com AND sobre bits atribuição com OR exclusivo sobre bits atribuição com OR inclusivo sobre bits atribuição com deslocamento sobre bits para a esquerda atribuição com deslocamento sobre bits para a direita vírgula esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita Operador Tipo Associatividade 1 esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita esquerda para a direita direita para a esquerda direita para a esquerda Fig. A.1 Tabela de precedência de operadores (parte 2 de 2). Apêndice B Conjunto de caracteres ASCII Conjunto de Caracteres ASCII Fig. B.1 O conjunto de caracteres ASCII Os dígitos à esquerda da tabela são os dígitos da esquerda do equivalente decimal (0 a 127) do código do caractere e os dígitos do topo da tabela são os dígitos da direita do código do caractere. Por exemplo, o código do caractere “F” é 70 e o código do caractere “&“ é 38. O 1 2 3 4 5 6 7 8 9 O 2 3 4 5 6 7 8 9 1 O 11 12 flui soh stx etx eot enq ack bel bs ht ni vt ff cr so si die dcl dc2 dc3 dc4 nak syn etb can em sub esc fs gs rs us sp ‘ # $ % & ‘ ( ) * + , - . / O 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H 1 J K L M N O P Q R S T U V W X Y Z [ \ 3 ‘ ‘ a b e d e f g h i j k 1 m n o p q r s t u v w x y z { } dei Apêndice C Sistemas de numeração Objetivos • Compreender os conceitos básicos dos sistemas de numeração, tais como base, valor posiciona! e valor do símbolo. • Compreender como trabalhar com números representados nos sistemas de numeração binário, octa! e hexadecimal. • Ser capaz de abreviar números binários como números octais ou hexadecimais. • Ser capaz de converter números octais e hexadecimais em números binários. • Ser capaz de fazer conversões de números decimais para seus equivalentes binários, octais e hexadecimais e vice-versa. • Compreender a aritmética binária e como números binários negativos são representados usando a notação de complemento de dois. Aqui estão os únicos números ratificados. Wil!iam Shakespeare A natureza tem uma espécie de sistema coordenado aritmético-geométrico, pois ela possui todos os tipos de modelos. O que percebemos da natureza está em modelos, e todos os modelos da natureza são belos. Ocorre-me que o sistema daquela natureza deve ser uma beleza real, pois em química descobrimos que as associações são sempre em belos números inteiros - não há frações. Richard Buckminster Fu!!er 4 APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1039 Visão Geral C.1 Introdução C.2 Abreviando números binários como números octais e hexadecimais C.3 Convertendo números octais e hexadecimais em números binários C.4 Convertendo do sistema binário, octal ou hexadecimal para o sistema decimal C.5 Convertendo do sistema decimal para o sistema binário, octal ou hexadecimal C.6 Números binários negativos: notação em complemento de dois Reswno . Terminologia Exetrícios de auto-revisão Respostas aos exercícios de auto-revisão • Ese,vícios C.1 Introdução Neste apêndice, apresentamos os principais sistemas de numeração que os programadores utilizam, especialmente quando estão trabalhando em projetos de software que exigem muita interação com hardware em “nível de máquina”. Projetos como esses incluem sistemas operacionais, software de redes de computadores, compiladores, sistemas de bancos de dados e aplicações que exigem alto desempenho. Quando escrevemos um inteiro como 227 ou -63 em um programa, assume-se que o número está no sistema de numeração decimal (base 10). Os dígitos no sistema de numeração decimal são 0, 1, 2, 3,4, 5, 6, 7, 8 e 9. O menor dígito é O e o maior dígito é 9 um a menos que a base 10. Internamente, os computadores usam o sistema de numeração binário (base 2). O sistema de numeração binário tem apenas dois dígitos, ou seja O e 1. Seu menor digito é O e seu maior digito é 1 - um a menos que a base 2. A Fig. C.l resume os dígitos usados nos sistemas de numeração binário, octal, decimal e hexadecimal. Como veremos, os números binários tendem a ser muito maiores do que seus equivalentes decimais. Os programadores que trabalham com linguagens de montagem (assemblers) e com linguagens de alto nível, que permitem que eles desçam ao “nível da máquina”, acham complicado trabalhar com números binários. Assim, dois outros sistemas de numeração - o sistema de numeração octal (base 8) e o sistema de numeração hexadecimal (base 16) - são populares, principalmente porque tornam conveniente a abreviação de números binários. No sistema de numeração octal, os dígitos variam de O a 7. Como tanto o sistema de numeração binário quanto o sistema octal possuem menos dígitos que o sistema decimal, seus dígitos são os mesmos que seus correspondentes do sistema decimal. O sistema hexadecimal apresenta um problema porque ele exige dezesseis dígitos - o menor dígito é O e o maior dígito tem valor equivalente a 15 (um a menos que a base 16). Por convenção, usamos as letras de A a F para representar os dígitos correspondentes aos valores decimais de 10 a 15. Desta forma, em hexadecimal podemos ter números como 876 consistindo apenas de dígitos semelhantes aos decimais, números como 8A55F consistindo em dígitos e letras, e números como FFE consistindo apenas em letras. Ocasionalmente, um número hexadecimal é grafado como uma palavra comum como FACE ou CADA - isso pode parecer estranho aos programadores acostumados a trabalhar com números. A Fig. C.2 resume cada um dos sistemas de numeração. Cada um desses sistemas de numeração usa a notação posicional - cada posição na qual é escrito um dígito possui um valor posicional diferente. Por exemplo, no número decimal 937 (o 9,o 3 e o 7 são chamados de valores dos símbolos ou valores dos algarismos), dizemos que o 7 é escrito na posição das unidades, o 3 é escrito na posição das dezenas e o é escrito na posição das centenas. Observe que cada uma dessas posições é uma potência da base (base 10) e que essas potências começam° DIgito binário Dígito octal Digito decimal Dígito Hexadecimal Fig. C.1 Dígitos dos sistemas de numeração binário, octal, decimal e hexadecimal (parte 1 de 2). 1040 C++ COMO PROGRAMAR Fig. C.1 Dígitos dos sistemas de numeração binário, octal, decimal e hexadecimal (parte 2 de 2). Dígito decimal 9 3 7 Nome da posição Centenas Dezenas Unidades Valor posicional 100 10 1 Valor posicional como uma potência da base 102 10’ 10° Fig. C.3 Valores posicionais no sistema de numeração decimal. Para números decimais maiores, as próximas posições à esquerda seriam a posição dos milhares ti u eievauo a terceira potência), aposição das dezenas de milhar (10 elevado à quarta potência), a posição das centenas de milhar (10 elevado à quinta potência), a posição dos milhões (10 elevado à sexta potência), a posição das dezenas de milhões (10 elevado à sétima potência) e assim por diante. No número binário 101, dizemos que o 1 da extremidade da direita está escrito na posição da unidade, o O está escrito na posição do dois e o 1 da extremidade esquerda está escrito na posição do quatro. Veja que cada uma dessas posições é uma potência da base (base 2) e que essas potências começam em O e aumentam de 1 em 1 à medida que nos movemos para a esquerda no número (Fig. C.4). Para números binários mais longos, as próximas posições à esquerda seriam a posição do oito (2 elevado à terceira potência), a posição do dezesseis (2 elevado à quarta potência), a posição do trinta e dois (2 elevado à quinta potência), aposição do sessenta e quatro (2 elevado à sexta potência) e assim por diante. No número octal 425, dizemos que o 5 está escrito na posição das unidades, 02 está escrito na posição do oito e o 4 está escrito na posição do sessenta e quatro. Veja que cada uma dessas posições é uma potência da base (base 8) e que essas potências começam em O e aumentam de 1 em 1 à medida que nos movemos para a esquerda no número (Fig. C.5). Dígito binário Dígito octal Digito decimal Dí gito Hexadecimal 4 4 4 5 5 5 6 6 6 7 7 8 9 7 8 9 A B C D E F (valor decimal (valor decimal (valor decimal (valor decimal (valor decimal (valor decimal 10) II) 12) 13) 14) 15) Atributo Binário Octal De cimal Hexadecimal Base 2 8 10 Menor dígito O O O Maior dígito 1 7 9 16 O F Fig. C.2 Comparação entre os sistemas de numeração binário, octal, decimal e hexadecimal. Valores posicionais no sistema de numeração decimal APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1041 Para números octais mais longos, as próximas posições à esquerda seriam aposição do quinhentos e doze (8 elevado à terceira potência), a posição do quatro mil e noventa e seis (8 elevado à quarta potência), a posição do trinta e dois mil, setecentos e sessenta e oito (8 elevado à quinta potência) e assim por diante. No número hexadecimal 3DA, dizemos que o A está escrito na posição das unidades, o D está escrito na posição do dezesseis e o 3 está na posição do duzentos e cinqüenta e seis. Veja que cada uma dessas posições é uma potência da base (base 16) e que essas potências começam em O e aumentam de 1 em 1 à medida que nos movemos para a esquerda no número (Fig. C.6). Fig. C.6 Valores posicionais no sistema de numeração hexadecimal. Para números hexadecimais mais longos, as próximas posições seriam aposição do quatro mile noventa e seis (16 elevado à terceira potência), aposição do trinta e dois mil, setecentos e sessenta e oito (16 elevado à quarta potência) e assim por diante. C.2 Abreviando números binários como números octais e hexadecimais O principal uso dos números octais e hexadecimais em computação é abreviar representações binárias longas. A Fig. C.7 destaca o fato de que números binários longos podem ser expressos de uma forma concisa em sistemas de numeração com bases maiores do que a do sistema de numeração binário. Valores posicionais no sistema de numeração binário 1 Digito binário 1 O Nome da posição Quatro Dois Valor posicional 4 2 Valor posicional como uma potência da base (2) 22 2’ 1 Unidade 1 2° Fig. C.4 Valores posicionais no sistema de numeração binário. Valores posicionais no sistema de numeração octal 1 Dígito octal 4 2 Nome da posição Sessenta e quatro Oito Valor posicional 64 8 Valor posicional como uma potência da base (8) 82 81 5 Unidade 1 8° Fig. C.5 Valores posicionais no sistema de numeração octal. 1 Valores posicionais no sistema de numeração hexadecimal Dígito hexadecimal 3 D Nome da posição Duzentos e Dezesseis cinqüenta e seis Valor posicional 256 16 Valor posicional como uma potência da base (16) 162 161 A Unidade 1 16° 1042 C++ COMO PROGRAMAR Fig. C.7 Equivalentes decimais, binários, octais e hexadecimais. Um relacionamento particularmente importante com o sistema de numeração binário, que tanto o sistema de numeração octal quanto o hexadecimal possuem, é que suas bases (8 e 16, respectivamente) são potências da base do sistema de numeração binário (base 2). Examine o número binário com 12 dígitos a seguir e seus equivalentes em octal e hexadecimal. Veja se você pode determinar como esse relacionamento torna conveniente exprimir números binários como números octais e hexadecimais. A resposta vem após os números. Número binário Equivalente octal Equivalente hexadecimal 100011010001 4321 8D1 Para ver como o número binário é convertido facilmente em um número octal, simplesmente divida o número binário de 12 dígitos em grupos de três bits consecutivos cada um e escreva aqueles grupos sobre os dígitos correspondentes do número octal, como se segue 100 011 010 001 4 3 2 1 Observe que o dígito octal escrito sob cada grupo de três bits corresponde exatamente ao equivalente octal daquele número binário de 3 dígitos, de acordo com o que mostra a Fig. C.7. O mesmo tipo de relacionamento pode ser observado na conversão de números do sistema binário para o hexadecimal. Em particular, divida o número binário de 12 dígitos em grupos de quatro bits consecutivos cada um e escreva aqueles grupos sobre os dígitos correspondentes do número hexadecimal, como se segue 1000 1101 0001 8 0 1 Observe que o dígito hexadecimal que você escreveu sob cada grupo de quatro bits corresponde exatamente ao equivalente hexadecimal daquele número binário de quatro dígitos, como mostra a Fig. C.7. C.3 Convertendo números octais e hexadecimais em números binários Na seção anterior, vimos como converter números binários em seus equivalentes octais e hexadecimais, formando grupos de dígitos binários e simplesmente rescrevendo esses grupos como seus valores octais e hexadecimais equivalentes. Esse processo pode ser usado na ordem inversa para produzir o número binário equivalente a um número octal ou hexadecimal dado. Número decimal Representação binária Representação octal Representação hexadecimal O O O 0 1 1 1 1 2 10 2 2 3 11 3 3 4 100 4 4 5 101 5 5 6 110 6 6 7 111 7 7 8 1000 10 8 9 1001 11 9 10 1010 12 A 11 1011 13 B 12 1100 14 C 13 1101 15 D 14 1110 16 E 15 1111 17 F 16 10000 20 10 APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1043 Por exemplo, o número octal 653 é convertido em binário simplesmente escrevendo-se o 6 como seu número binário equivalente de 3 dígitos 110, o 5 como seu binário de 3 dígitos equivalente 101 e o 3 como seu binário de 3 dígitos equivalente 011 para formar o número binário de 9 dígitos 110101011. O número hexadecimal FAD5 é convertido em binário simplesmente escrevendo-se o F como seu número binário equivalente de 4 dígitos 1111,0 A como seu binário de 4 dígitos equivalente 1010, o D como seu binário de 4 dígitos equivalente 1101 e o 5 como seu binário de 4 dígitosequivalente 0101 para formar o número binário de 16 dígitos 111110101 1010101. C.4 Convertendo do sistema binário, octal ou hexadecimal para o sistema decimal Por estarmos acostumados a trabalhar em decimal, freqüentemente é útil converter um número binário, octal ou hexadecimal em decimal, para ter uma noção do que o número “realmente” vale. Nossos diagramas na Seção C. 1 expressam os valores posicionais em decimais. Para converter um número em decimal, a partir de outra base, multiplique o equivalente decimal de cada dígito por seu valor posicional e some esses produtos. Por exemplo, o número binário 110101 é convertido no decimal 53 de acordo com o que mostra a Fig. C.8. Fig. C.8 Convertendo um número binário em decimal. Para converter o octal 7614 no decimal 3980, aplicamos a mesma técnica, usando dessa vez os valores posicionais octais apropriados, como mostra a Fig. C.9. Para converter o hexadecimal AD3B no decimal 44347, aplicamos a mesma técnica, usando dessa vez os valores posicionais hexadecimais apropriados, como mostra a Fig. CIO. Fig. C.10 Convertendo um número hexadecimal em decimal. Convertendo um núm ero binário em decimal 1 Valores posicionais: 32 16 8 4 2 1 Valores dos algarismos: 1 1 O 1 O 1 Produtos: 1*32=32 1*1616 0*8=0 1*44 0*2=0 1*11 Soma: =32+16+0+ 4+ 0+153 Convertendo um número octal em decimal 1 ‘valores posicionais: 512 64 8 1 Valores dos algarismos: 7 6 1 4 Produtos: 7*5123584 6*64=384 1*8=8 4*14 Soma: = 3584 + 384 + 8 + 4 = 3980 Fig. C.9 Convertendo um número octal em decimal. Convertendo um número hexadecimal em decimal Valores posicionais: 4096 256 16 1 Valores dos algarismos: A D Produtos: A*4096=40960 D*256=3328 3 3*16=48 B B*1=11 Soma: = 40960 + 3328 + 48 + 11 = 44347 1044 C++ COMO PROGRAMAR C.5 Convertendo do sistema decimal para o sistema binário, octal ou hexadecimal As conversões das seções anteriores são conseqüências naturais das convenções da notação posicional. Converter do ______ sistema decimal para o sistema binário, octal ou hexadecimal também segue essas convenções. Suponhaque desejamos converter o número decimal 57 para o sistema binário. Começamos escrevendo os valores posicionais das colunas, da direita para a esquerda, até alcançarmos a coluna cujo valor posicional seja maior do que o número decimal. Não precisamos daquela coluna, portanto a descartamos. Assim, escrevemos inicialmente: Valores posicionais: 64 32 16 8 4 2 1 A seguir, descartamos a coluna com valor 64, restando: Valores posicionais: 32 16 8 4 2 1 A seguir, trabalhamos a partir da coluna da extremidade esquerda em direção à direita. Dividimos 57 por 32 e observamos que há uma vez 32 em 57, com resto 25, portanto escrevemos 1 na coluna 32. Dividimos 25 por 16 e observamos que há uma vez 16 em 25, com resto 9 e escrevemos 1 na coluna 16. Dividimos 9 por 8 e observamos que há uma vez 8 em 9, com resto 1. As duas próximas colunas produzem quocientes com resto zero quando divididas por seus valores posicionais, portanto escrevemos Os nas colunas 4 e 2. Finalmente, dividindo 1 por 1 obtemos 1, portanto escrevemos 1 na coluna 1. Isso leva a: Valores posicionais: 32 16 8 4 2 1 Valores dos algarismos: 1 1 1 O O 1 e assim o valor decimal 57 é equivalente ao binário 111001. Para converter o número decimal 103 para o sistema octal, começamos escrevendo os valores das colunas até alcançarmos a coluna cujo valor posicional seja maior do que o número decimal. Não precisamos dessa coluna, portanto a descartamos. Assim, escrevemos inicialmente: Valores posicionais: 512 64 8 1 A seguir, descartamos a coluna com valor 512, restando: Valores posicionais: 64 8 1 A seguir, trabalhamos a partir da coluna da extremidade esquerda em direção à direita. Dividimos 103 por 64 e observamos que há uma vez 64 em 103, com resto 39, portanto escrevemos 1 na coluna 64. Dividimos 39 por 8 e observamos que há quatro vezes 8 em 39, com resto 7 e escrevemos 4 na coluna 8. Finalmente, dividimos 7 por 1 e observamos que há sete vezes 1 em 7, não ficando resto algum, portanto escrevemos 7 na coluna 1. Isso leva a: Valores posicionais: 64 8 1 Valores dos algarismos: 1 4 7 e assim o valor decimal 103 é equivalente ao octal 147. Para converter o número decimal 375 para o sistema hexadecimal, começamos escrevendo os valores das colunas até alcançarmos a coluna cujo valor posicional seja maior do que o número decimal. Não precisamos dessa coluna, portanto a descartamos. Assim, escrevemos inicialmente: Valores posicionais: 4096 256 16 1 APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1045 A seguir, descartamos a coluna com valor 4096, restando: Valores posicionais: 256 16 1 A seguir, trabalhamos a partir da coluna da extremidade esquerda em direção à direita. Dividimos 375 por 256 e observamos que há uma vez 256 em 375, com resto 119, portanto escrevemos 1 na coluna 256. Dividimos 119 por 16 e observamos que há sete vezes 16cm 119, com resto 7 e escrevemos 7 na coluna 16. Finalmente, dividimos 7 por 1 e observamos que há sete vezes 1 em 7, não ficando resto algum, portanto escrevemos 7 na coluna 1. Isso leva a: Valores posicionais: 256 16 1 Valores dos algarismos: 1 7 7 e assim o valor decimal 375 é equivalente ao hexadecimal 177. C.6 Números binários negativos: notação em complemento de dois A análise deste apêndice concentrou-se nos números positivos. Nesta seção, explicamos como os computadores representam números negativos usando a notação em complemento de dois. Em primeiro lugar, explicamos como é formado o complemento de dois de um número binário e depois mostramos por que ele representa o valor negativo de um determinado número binário. Considere um equipamento com inteiros de 32 bits. Suponha int valor = 13; A representação em 32 bits do valor é 00000000 00000000 00000000 00001101 Para formar o negativo de valor, formamos inicialmente o complemento de um, aplicando o operador de complemento sobre bits de C++ (-), que também é chamado de operador NOT sobre bits: complementoDeUmDeValor = ‘valor; Internamente, valor é agora valor com cada um de seus bits invertidos - os uns se tornam zeros e os zeros se tornam uns, como segue: valor: 00000000 00000000 00000000 00001101 ‘valor (i.e., complemento de um de valor): 11111111 11111111 11111111 11110010 Para formar o complemento de dois de valor, simplesmente adicionamos um ao complemento de um de valor. Assim, O complemento de dois de valor é: 11111111 11111111 11111111 11110011 Agora, se isso é realmente igual a -13, devemos ser capazes de adicionar o binário 13 a ele e obter o resultado 0. Vamos tentar fazer isso: 00000000 00000000 00000000 00001101 + 11111111 11111111 11111111 11110011 00000000 00000000 00000000 00000000 O bit transportado (vai um) da coluna da extremidade esquerda é descartado e realmente obtemos zero como resultado. Se adicionássemos o complemento de um de um número ao próprio número, o resultado seria todo Is. O 1046 C++ COMO PROGRAMAR segredo de obter um resultado todo em zeros é que o complemento de dois vale 1 a mais do que o complemento de um. A adição de 1 faz com que cada coluna resulte em zero, transportando o valor 1 para a próxima coluna. O valor é transportado para a esquerda, de uma coluna para outra, até que seja descartado do bit da extremidade esquerda e assim o número resultante fica todo consistindo em zeros. Na verdade, os computadores realizam uma subtração como x = a - valor; adicionando o complemento de dois de valor a a como se segue: x = a + (-‘valor + 1); Suponha que a é 27 e valor é 13, como antes. Se o complemento de dois de valor é realmente o negativo de valor, adicionar a a deve produzir o resultado 14. Vamos tentar fazer isso: a(i.e., 27) 00000000 00000000 00000000 00011011 +(-valor + 1) + 11111111 11111111 11111111 11110011 00000000 00000000 00000000 00001110 que é realmente igual a 14. Resumo Quando escrevemos um inteiro como 19 ou 227 ou -63 em um programa, o número é consideradoautomaticamente como estando no sistema de numeração decimal (base 10). Os dígitos no sistema de numeração decimal são 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9. O menor dígito é O e o maior dígito é 9-um a menos que a base 10. • Internamente, os computadores usam o sistema de numeração binário (base 2). O sistema de numeração binário tem apenas dois dígitos, que são O e 1. Seu menor dígito é O e seu maior dígito é 1 - um a menos que a base 2. • O sistema de numeração octal (base 8) e o sistema de numeração hexadecimal (base 16) se tornaram populares principalmente porque são convenientes para exprimir números binários de uma forma abreviada. • Os dígitos do sistema de numeração octal variam de 0 a 7. • O sistema de numeração hexadecimal apresenta um problema porque exige dezesseis dígitos - o menor dígito com valor 0 e o maior dígito com um valor equivalente a 15 em decimal (um a menos que a base 16). Por convenção, usamos as letras A a F para representar os dígitos hexadecimais correspondentes aos valores decimais 10 a 15. • Cada sistema de numeração usa notação posicional - cada posição na qual um dígito é escrito tem um valor posicional diferente. • Um relacionamento importante que tanto o sistema de numeração octal quanto o sistema de numeração hexadecimal possuem com o sistema binário é que as bases dos sistemas octal e hexadecimal (8 e 16, respectivamente) são potências da base do sistema de numeração binário (base 2). • Para converter um número octal em um número binário, simplesmente substitua cada dígito octal pelo binário equivalente de três dígitos. • Para converter um número hexadecimal em um número binário, simplesmente substitua cada dígito hexadecimal pelo binário equivalente de quatro dígitos. • Por estarmos acostumados a trabalhar com números decimais, freqüentemente é útil converter um número binário, octal ou hexadecimal em decimal para ter uma melhor noção do que o número “realmente” vale. • Para converter um número de outra base para um número decimal, multiplique o equivalente decimal de cada dígito por seu valor posicional e some esses produtos. Os computadores representam números negativos usando a notação em complemento de dois. APËNDICE C - SISTEMAS DE NUMERAÇÃO 1047 Para formar o negativo de um valor, forme inicialmente seu complemento de um aplicando o operador de complemento sobre bits de C++ (). Isso inverte os bits do valor. Para formar o complemento de dois de um valor, simplesmente adicione um ao complemento de um do valor. Terminologia base sistema de numeração hexadecimal conversões sistema de numeração na base 10 dígito sistema de numeração na base 16 notação em complemento de dois sistema de numeração na base 2 notação em complemento de um sistema de numeração na base 8 notação posicional sistema de numeração octal operador de complemento sobre bits valor do símbolo sistema de numeração binário valor negativo sistema de numeração decimal valor posicional Exercícios de auto-revisão C.1 As bases dos sistemas de numeração decimal, binário, octal e hexadecimal são ____________ ,__________ ,___________ e C.2 Em geral. as representações decimal, octal e hexadecimal de um determinado número binário contêm (mais/menos) dígitos do que o número binário. C.3 (Verdadeiro/Falso) Um motivo popular para o uso do sistema de numeração decimal é que ele forma uma notação conveniente para exprimir números binários de uma forma abreviada, simplesmente substituindo-se um dígito decimal por um grupo de quatro dígitos binários. C.4 A representação (octal/hexadecimalldecimal) de um valor binário muito grande é a mais concisa (das alternativas fornecidas). C.5 (Verdadeiro/Falso) O maior dígito em qualquer base vale um a mais que a base. C.6 (Verdadeiro/Falso) O menor dígito em qualquer base vale um a menos que a base. C.7 O valor posicional do dígito da extremidade direita de qualquer número nos sistemas binário, octal, decimal e hexadecimal é sempre C. O valor posicional do dígito à esquerda do dígito da extremidade direita nos sistemas binário, octal, decimal ou hexadecimal é sempre C.9 Preencha as lacunas na tabela a seguir com os valores posicionais das quatro posições da direita em cada um dos sistemas de numeração indicados. decimal 1000 100 10 1 hexadecimal 256 binário octal 512 8 C.1O Converta o binário 110101011000 para os sistemas octal e hexadecimal. C.I 1 Converta o hexadecimal FACE para o sistema binário. C.12 Converta o octal 7316 para o sistema binário. C.13 Converta o hexadecimal 4FEC para o sistema octal. (Sugestão: em primeiro lugar, converta 4FEC para o sistema binário e depois converta aquele número binário para o sistema octal). C.14 Converta o binário 1101110 para o sistema decimal. C.15 Converta o octal 317 para o sistema decimal. C.16 Converta o hexadecimal EFD4 para o sistema decimal. C.17 Converta o decimal 177 para os sistemas binário, octal e hexadecimal. 1048 C++ COMO PROGRAMAR C.18 Mostre a representação binária do decimal 417. Depois mostre os complementos de um e de dois de 417. C.19 Qual o resultado quando o complemento de um de um número é adicionado ao próprio número? Respostas aos exercícios de auto-revisão C.1 10. 2, 8, 16. C.2 Menos. C.3 Falso. C.4 1-lexadecimal. C.5 Falso o maior dígito em qualquer base vale um a menos que a base. C.6 Falso - o menor dígito em qualquer base é zero. C.7 1 (a base elevada à potência zero). C.8 A base do sistema de numeração. C.9 Preencha as lacunas na tabela a seguir com os valores posicionais das quatro posições da direita em cada um dos sistemas de numeração indicados. decimal 1000 100 10 hexadecimal 4096 256 16 binário 8 4 2 octal 512 64 8 C.1O Octal 6530; Hexadecimal D58. C.11 Binário 1111 1010 1100 1110. C.12 Binário 111 011 001 110. C.13 Binário0l00 111 111 101 100: 0cta147754. C.14 Decimal 2+4+8+32+64=110. C.15 Decimal 7+1*8+3*64=7+8+192=207. C.16 Decimal 4+13*16+15*256+14*4096=61396. C.l7 Decimal 177 para binário: 256 128 64 32 16 8 4 2 128 64 32 16 8 4 2 (1*128)+(0*64) +(1*32) + (1*16)+ (0*8) + (0*4)+(0*2)+(1*1) 10110001 para octal: 512 64 8 1 64 8 1 (2*64)+ (6*8) +(1*1) 261 para hexadecimal: 256 16 1 16 1 (11*16)+(1*1) (B*16) + (1*1) B1 C.18 Binário: 5122561286432168421 256 128 64 32 16 8 4 2 1 (1*256) + (1*128) + (0*64) + (1*32) + (0*16) + (0*8) + (0*4) + (0*2) + (1*1) 110100001 APÊNDICE C - SISTEMAS DE NUMERAÇÃO 1049 Complemento de um: 001011110 Complemento de dois: 001011111 Verificação: o número binário original + seu complemento de dois 110100001 001011111 000000000 C.19 Zero. Exercícios C.20 Algumas pessoas argumentam que muitos de nossos cálculos seriam mais fáceis no sistema de numeração de base 12 porque 12 é divisível por muito mais números do que 10 (para base 10). Qual o menor dígito na base 12? Qual pode ser o maior símbolo para o dígito da base 12? Quais os valores posicionais das quatro posições da direita de qualquer número no sistema de numeração da base 12? C.21 Como o maior valor de símbolo nos sistemas de numcração analisados se relaciona com o valor posicional do primeiro dígito à esquerda do dígito mais à direita de qualquer número nesses sistemas de numeração? C.22 Complete a tabela de valores posicionais a seguir para as quatro posições da direita em cada um dos sistemas de numeração indicados: decimal 1000 100 10 1 basefl . . . . 6 base 13 . . . 169 . . base3 27 . . C.23 Converta o binário 100101111010 em octal e em hexadecimal. C.24 Converta o hexadecimal 3A7D em binário. C.25 Converta o hexadecimal 765F em octal. (Sugestão: converta inicialmente 765F em binário e depois converta aquele número binário em octal.) C.26 Converta o binário 1011110 em decimal. C.27 Converta o octal 426 em decimal. C.28 Converta o hexadecimal FFFF em decimal. C.29 Converta o decimal 299 em binário, em octal e em hexadecimal. C.30 Mostre a representação binária do decimal 779. Depois mostre os complementos de um e de dois de 779. C.31 Qual o resultado da soma do complemento de dois de um númerocom o próprio número? C.32 Mostre o complemento de dois do valor inteiro -1 em um equipamento com inteiros de 32 bits. Apêndice D Recursos sobre C++ na Internet e na Web Este apêndice contém uma lista de recursos valiosos para C++ na Internet e na World Wide Web. Incluem FAQs (respostas a perguntas feitas freqüentemente), tutoriais, como obter o ANSI/ISO C++ padrão, informações sobre compiladores C++ populares e como obter compiladores gratuitamente, demos, livros, tutoriais, ferramentas de software, artigos, entrevistas, conferências, jornais e revistas, cursos on-line, grupos de notícias e recursos para carreira profissional. Para obter mais informações sobre o American National Standards Institute (ANSI) ou para adquirir documentos padrão, visite o ANSI em http: //www. ansi . org/. Di Recursos http://www.progsource.com/index. htinl The Programmer’s Source é uma grande fonte de informações sobre muitas linguagens de programação, inclusive C++. Você encontrará listas de ferramentas, compiladores, software, livros e outros recursos para c++. http: //www. intranet. ca/-sshah/booklist. html#C++ The Programmer’s Book List tem uma seção de livros sobre C++ com mais de 30 títulos. http: //www. genitor, comi resources . htm O site Developer Resources tem links para compiladores C++, ferramentas úteis de C++, código- fonte do CY C++ Users Journal e publicações. http: //www.possibility. com/Cpp/CppCodingStandard.html O site The C+ + Coding Standard tem uma grande quantidade de informações sobre a linguagem de programação C++ bem como uma grande lista de recursos sobre C++ na Web. http: //help-site. com/cpp . htm). Help-site.com fornece links para recursos sobre C++ naWeb. http: //www. glenmccl . com/tutor. htm Este site é uma boa referência para usuários com conhecimento de CIC++. Os tópicos são acompanhados por explicações detalhadas e exemplos de código. http: //www . prograinmersheaven. com/zone3/cat353/index . htm Este site oferece uma vasta coleção de bibliotecas para C++. Estas bibliotecas estão disponíveis para download gratuito. http: //www . prograinmersheaven. com/zone3/catl55/index . htm Este site oferece ferramentas e bibliotecas para CIC++. http: //w. programmersheaven. com/wwwboard/board3/wwwboard. asp Este quadro de mensagens permite aos usuários divulgar perguntas sobre programação em C++. Estas bibliotecas estão disponíveis para download gratuito. APÊNDICE D - RECURSOS SOBRE C++ NA INTERNET E NA WEB 1051 http: //www hal9k. com/ cug/ Este site oferece recursos, jornais, shareware,freeware, etc. http: //developer earthweb. com/directories/pages/dir. c . developmenttools htm Um site popular na Web para programadores, Developer.com oferece uma ampla lista de recursos para programadores usando C e C++. http: //www.devx.com DevX é um site abrangente com recursos para programadores. A seção oferece as últimas novidades, ferramentas e técnicas para diversas linguagens de programação. A seção C++ zone do site é dedicada a C++. D.2 Tutoriais http: //info desy . de/gna/html/cc/index html Este tutorial Introduction lo Object-Orientred Programming Using C++ está disponível para download ou você pode se registrar em um curso baseado na Web. Verifique os livros recomendados sobre programação orientada a objetos e a linguagem de programação C++. http: //uu-gna.mit. edu: 8001/uu-gna/text/cc/Tutorial/tutorial . html Este tutorial Introduction to Object-Oriented Programming Using C++ é dividido em 10 capítulos, cada um com um conjunto de exercícios e soluções para os exercícios. http: //www. icce. rug . nl/docs/cplusplus/cplusplus . html Este tutorial, escrito por um professor universitário, foi projetado para programadores de C que querem apreender C++. http: //www.rdw. tec.mn.us/ O Red Wing/Winona Technical Coliege oferece cursos de C++ on-line valendo créditos. http: //www. zdu. com/zdu/catalog/progranuning . htm A ZD Net University oferece vários cursos on-line relacionados com a linguagem de programação C++. http: //library. advanced. org/3074/ Este tutorial foi projetado para programadores de Pascal que querem aprender C++. ftp: //rtfm.mit. edu/pub/usenet/news . answers/C-faq/learn-c-cpp-today Este site tem uma lista de tutoriais sobre C++. Também contém informações sobre vários compiladores C++. http: //www. icce . rug . nh/docs/cplusplus/cplusplus . htm Um site para usuários que já conhecem C e querem aprender C++. http: //www. cprogranuning. com/tutorial/html Este site inclui um tutorial passo a passo que inclui exemplos de código. http://www.progranunersheaven.com/zone3/cat34/index. htm Este site contém uma lista de assuntos de tutoriais. Os níveis dos tutoriais variam desde principiantes até especialistas. D.3 FAQs http: //reality. sgi . com/austern/std-c++/faq . html Este é um site de FAQs dedicado a perguntas sobre C++ padrão ANSI/ISO, o projeto da linguagem de programação C++ e às últimas mudanças na linguagem. http: //www. trtnphrst. demon . co . uk/cpplibsl . html Este é um FAQ sobre as bibliotecas de C++. Você encontrará uma extensa lista de respostas às perguntas feitas freqtientemente sobre as bibliotecas padrão de C++. 1052 C++ COMO PROGRAMAR http: //pneuma phys ualberta. ca/-.burris/cpp htm O The Internet Link Exchange é um Outro grande recurso para informações sobre C++. Este site tem links para FAQs relacionados a comp. lang. c++ e as bibliotecas padrão de C++. http: //www.math.uio.no/nett/faq/C-faq/faq.html A lista comp. lang. e de perguntas feitas freqüentemente (FAQs) e respostas. http: //lglwww. epfl ch/’wo1f/c std. htm]. A lista de FAQs sobre o padrão ANSI/ISO para a linguagem de programação C. http: //www. cerfnet. com/-mpcline/C++-FAQs-Lite/ Este site tem muitas FAQs divididas em 35 categorias. http: //www. faqs org/faqs/by-newsgroup/comp/comp. lang. html Este site consiste em uma série de links para FAQs e tutoriais reunidos do grupo de notícias Comp Lang C++. http: //www. cerfnet. com/-mpc1ine/C++-FAQs-Lite/ Este é um site de FAQ com uma ampla gama de tópicos. Cada tópico inclui diversas perguntas com respostas. http: //www. eskimo. coin/-scs/C-faq/top html Esta lista de FAQ contém tópicos tais como ponteiros, alocação de memória e strings. DA Visual C-i-+ http://ehesworth.com/pv/languages/c/visualcpptutorial. htin Este é um bom tutorial para principiantes que estejam aprendendo o Microsoft Visual C++. O tutorial dá ao usuário uma visão geral sucinta de C+÷. D.5 comp.lang.c++ http: //weblab. research att. com/phoaks/comp/lang/c++/ resourcesO html UAU! Este site é um tremendo recurso de informações relacionadas com comp. lang. c++. O título da página, People Helping OneAnotherKnow Stuff, resume tudo que é este site. Você encontrará links para mais de 40 recursos adicionais de informações sobre C++. http: //www. r2m. com/windev/cpp-compiler html Este contém links para muitos sites relacionados com C++. http: //home istar. ca/-.stepanv/ Este site tem muitos links para sites com artigos e informações relacionados com a programação C++. Tópicos listados neste site incluem gráficos orientados a objetos, o padrão ANSI C++, a biblioteca padrão de gabaritos (STL), recursos sobre MFC e tutoriais. http: //kom. net/-’dbrick/newspage/cornp. lang. c++ html Visite este site para se conectar a grupos de notícias relacionados à hierarquia eomp lang c++. http: //www. austinlinks com/CPlusPlus/ O site da Quadralay Corporation tem links para recursos sobre C++, incluindo Visual C++/bibliotecas MFC, informações sobre programação em C++, recursos para carreiras profissional em C÷+ e uma lista de tutoriais e outras ferramentas on-line para ajudá-lo a aprender C++. http: /1db. csie ncu. edu. tw/-kant c/C/chapter2 21 . html Este site da Web tem a lista das funções da biblioteca padrão ANSI C. http: //wwwcnl . cem. ch/asd/geant/geant4yublic/codingstandards/ coding/coding2 . html Um recurso excelente e extenso sobre informações acerca do padrão C++ APÊNDICE D - RECURSOS SOBRE C++ NA INTERNET E NA WEB 1053http: //ibd. ar. com/ger/comp. lang. . html O Green Eggs Report lista mais de 100 URLs dentro de comp. lang . C++. http: //www. ts umu . se/-maxell/C++/ Este site fornece exemplos de código para algumas das classes C++. http: //www. quadralay. com/CPlusPlus/ Este é um grande recurso para informações sobre programação C++ , aprendizado de C++, carreiras em C++ e outras informações relacionadas com C++. http: //www. research. att. comi bs/homepage . htznl Esta é a homepage de Bjarne Stroutrup, criador da linguagem de programação C++. Ele fornece uma lista de recursos C++, FAQs e outras informações úteis sobre C++. http: //www. cygnus . coxn/misc/wp/draft/index . htxnl Este site tem a “minuta de trabalho” do padrão ANSI C++ em formato HTML (dezembro de 1996). http: //www . austinlinks . com/cPlusPlus/ Este site tem uma lista de recursos C++ incluindo livros sugeridos, recursos para carreira profissional, informações sobre a linguagem de programação C++ e links para sites com listas de recursos C++. ftp: //research. att. com/dist/c++std/WP/CD2/ Este site tem a minuta atual do padrão ANSI/ISO para C++. http: //ai kaist. ac . kr/ -ymkim/Program/c++ . html Este site oferece tutoriais, bibliotecas, compiladores populares, FAQs e grupos de notícias. http: //www. cyberdiem. com/vin/learn . html Learn C/C++ Today é o título deste site, que oferece diversos tutoriais avançados sobre CIC++. http: //www. trumphurst. com/cpplibsl . html A The C++ Libraries FAQ é compilada por programadores profissionais para o uso e benefício de outros programadores de C++. A biblioteca é atualizada regularmente e é uma boa fonte de informações atualizadas. http: //www. experts-exchange . com/comp/lang/cplusplus/ The Experts Exchange é um recurso gratuito para profissionais hi gh-tech que desejem compartilhar informações com seus colegas. Sócios podem afixar perguntas e respostas. http: //www. execpc. com/ -ht/vc . htm Este site é uma compilação de links sobre programação em C++ que incluem sites de informações genéricas, tutoriais, revistas e bibliotecas. http: //cplus . about. com/compute/cplus/ Este é o site About.com para as linguagens de programação CIC++. Você encontrará tutoriais, freeware/ shareware, dicionários, empregos, revistas e muitos outros itens relacionados. http: //pent2l infosys . tuwien . ac. at/cetus/ oocplusplus . htinl#oocylusylusgeneralnewsgroups Neste site você encontrará uma explicação geral sobre C++. Este site contém grupos de notícias. news : comp. lang. c++ Este é um grupo de notícias dedicado a questões sobre a linguagem orientada a objetos C++. http: //cuiwww. unige . ch/OSG/Vitek/Compilers/YearB6/msg00046 . html “O padrão C em máquinas segmentadas”. http: //www. csci . csusb . edu/dick/c++std/ Este site tem links para a minuta do padrão C++ ANSI/ISO e o grupo Usenet comp. std. c++ que fornece novas informações sobre o padrão. 1054 C++ COMO PROGRAMAR news : comp. lang. c++ . moderated Este é um grupo de notícias mais voltado a aspectos técnicos dedicado à linguagem C++. http: / /www . progsource . com/index. htxnl The Programmer’s Source é um grande recurso de informações sobre muitas linguagens de programação inclusive C++. Você encontrará listas de ferramentas, compiladores, software, 1ivros e outros recursos para C++. A lista de compiladores está organizada por plataforma. http: //www. cygnus . com/misc/gnu-win32/ O ambiente de desenvolvimento GNU está disponível isento de custo no site Cygnus na Web. http: //www. remcomp. com/lcc-win32/ Você pode fazer download do compilador LCC-Win32 para Windows 95/NT, sem custo, deste site da Web. http: //www . microsoft. com/visualc/ A homepage do Microsoft Visual C++ fornece informações sobre produtos, overviews, materiais suplementares e informações sobre como encomendar o compilador Visual C++. http://www.com/products/languages/watccpl. html Notícias e informações sobre o produto para o Watcom C/C++ versão 11.0 da Powersoft. Não pode ser feito download do compilador a partir deste site da Web. São fornecidas informações para aquisição. http://netserv.bor1and.com/bor1andcpp/cppcomp/turbocpp.htm1 O site na Web para o compilador Borland Turbo C++ Visual Edition para Windows. http: //www. symantec. com/scpp/fs scpp72 95. html Symantec C++ 7.5 para Windows 95 e Windows NT. http: //www .metrowerks . com/products/ Metrowerks CodeWarrior para Macintosh ou Windows. http: //www. faqs . org/faqs/by-newsgroup/comp/comp. compilers . html Este é um site que criou uma lista de FAQs gerados dentro do grupo de notícias comp. compilers. http: //www.ncf. carleton. ca/%7Ebg283/ Este é um compilador C++ para DOS chamado de Miracle C compiler. O compilador é grátis para download, mas o código-fonte não fica disponível enquanto você não pagar a taxa de registro. http: //www . borland. com/bcppbuilder/ Este é um link para o Borland C++ Builder5.5. Uma versão de linha de comando grátis está disponível para download. http: //www. compilers . net/ Compilers.net é um site projetado para ajudá-lo a encontrar compiladores. http: //sunset . backbone . olemiss . edu/%7Ebobcook/eC/ Este compilador C++ é projetado para usuários principiantes em C++ que queiram passar de Pascal para C++. http: //developer . intel . com/vtune/conipilers/cpp/ O copilador Intel C++. Plataformas suportadas são Windows 98, NT e 2000. http: //www. kai . com/Çplusplus/index . htxnJ. O compilador Kai C++ está disponível gratuitamente para um período de demonstração de 30 dias. 0.6 Compiladores APÊNDICE D - RECURSOS SOBRE NA INTERNET E NA WEB 1055 0.7 Ferramentas de desenvolvimento http: //www. quintessoft. comi A Quintessoft Engineering, mc. oferece o Code Navigator para C++, uma ferramenta de desenvolvimento em C++ para Windows 951NT. Você encontrará informações sobre o produto, comentários dos usuários, downloads gratuitos de edições de demonstração e informações de preços para o produto. D.8 Biblioteca padrão de gabaritos Tutoriais http: //www. cs brown . edu/people/jak/prograinming/stl-tutorial/ tutorial html Este tutorial sobre a STL está organizado em exemplos, filosofia, componentes e estendendo a STL. Você encontrará exemplos de código usando os componentes da STL, explicações e diagramas úteis. http: //web. ftech. net/honeyg/artic1es/eff stl htm Este tutorial sobre a STL oferece informações sobre os componentes da STL, contêineres, adaptadores de stream e iteradores, transformação e seleção de valores, filtragem e transformação de valores, e objetos. http: //www . xraylith wisc edu/-khan/software/stl/osexaniples/ examples htinl Este é um site útil para pessoas que estejam ainda aprendendo sobre a STL. Você encontrará uma introdução à STL e exemplos do ObjectSpace STL Tool Kit. Referências http: //www. sgi . com/Technology/STL/other resources . html Este site tem uma lista de muitos sites da Web relacionados com a STL e uma lista de livros sobre a STL recomendados. http: //www. cs . rpi edu/proects/STL/st1/st1 . html Esta é a homepage do Standard Template Library Online Reference do Rensselaer Polytechnic Tnstitute. Você encontrará explicações detalhadas sobre a STL, bem como links para outros recursos úteis para informações sobre a STL. http: //www. sgi com/Technology/STL/ O Silicon Graphics Standard Template Library Programmer’s Guide é um recurso útil para informações sobre a STL. Você pode fazer download da STL deste site e encontrar as informações mais recentes, documentação de projeto e links para outros recursos para a STL. http: //www. dinkumware comirefcpp . html Este site contém informação útil sobre a biblioteca C++ do padrão ANSI/ISO e contém extensa informação sobre a biblioteca padrão de gabaritos (STL). http: //www. roguewave com/products/xplatfortn/stdlib/ A página da Web da Rogue Wave Software’s Standard C++ Library. Você pode fazer download de artigos relacionados com a versão deles da biblioteca padrão de C++. FAQs ftp: //butler .hpl .hp. com/stl/stl. faq Este site de FTP é uma folhade FAQ para a STL mantida por Marian Corcoran, membro do comitê ANSI e uma especialista em C++. 1056 C++ COMO PROGRAMAR Artigos, livros e entrevistas http: //www. sgi com/Technology/STL/other resources html Este site relaciona muitos sites da Web relacionados com a STL e uma pequena lista de livros sobre a STL recomendados, http://www.byte.com/art/951O/sec12/art3. htzn O site da Bvte Magazine tem uma cópia de um artigo sobre a STL escrito por Alexander Stepanov. Stepanov, um dos criadores da biblioteca padrão de gabaritos. oferece informações sobre o uso da STL em programação genérica. http: //www. sgi com/Technology/STL/drdobbs-interview.html Uma entrevista com Alexander Stepanov que tem algumas informações interessantes sobre a criação da biblioteca padrão de gabaritos. Stepanov fala sobre como a STL foi conceituada, programação genérica, o acrônimo “STL” e mais. Padrão ANSI/ISO C++ http://www.ansi.org/ Você pode comprar uma cópia do documento padrão de C÷+ neste site. Software http: //www. cs rpi . edu/musser/stJ. html O site RPI STL inclui informação sobre como a STL difere de outras bibliotecas de C++ e como compilar programas que usam a STL, lista dos principais arquivos de #include da STL, exemplos de programas que usam a STL, classes contêíneres da STL e categorias de iteradores da STL. Ele também oferece uma lista de compiladores compatíveis com a STL, sites de FTP para código-fonte STL e materiais relacionados. http://www.inathcs.sisu.edu/facu1ty/horstman/safest1.htm1 Faça download do SAFESTL.ZIP. uma ferramenta projetada para encontrar erros em programas que usam a STL. http://www.objectspace.com/jgh Object Space oferece informação sobre o porte de C++ para Java. Você pode fazer download gratuito da classe portável Standards<ToolKit> deles. Os principais destaques do toolkit são contêineres, iteradores, algoritmos, alocadores, strings e exceções. http: //www. cs rpi edu/-wiseb/stl-borland htnil “Using the Standard Template Library with Borland C++ Este site é uma referência útil para pessoas que usam o compilador Borland C++. O autor tem seções sobre advertências e incompatibilidades. http: //msdn nicrosoft. com/visualc/ Esta é a homepage do Microsofi Visual C+ +. Aqui você pode encontrar as notícias mais recentes sobre o Visual C++, atualizações, recursos técnicos, exemplos e downloads. http: //www . borland. com/bcppbuilder/ Esta é a homepage do Borland C++ Builder. Aqui você pode encontrar uma variedade de recursos para C++, incluindo diversos grupos de notícias sobre C++, informações sobre as mais recentes melhorias do produto, FAQs e muitos outros recursos para programadores que usam o C++ Builder. Bibliografia (A192) Allison, C., “Text Processing 1,” The C Users Journal, Vol. 10, No. 10, October 1992, pp. 23-28. (A192a) Allison, C., “Text Processing II,” The C Users Journal, Vol. 10, No. 12, December 1992, pp. 73-77. (A193) Allison, C., “Code Capsules: A C++ Date Class, Part 1,” The C Users Journal, Vol. 11, No. 2, February 1993, pp. 123-131. (A194) Allison, C., “Conversions and Casts,” The C/C++ (Jsers Journal, Vol. 12, No. 9, September 1994, pp. 67-85. (Am95) Almarode, J., “Object Security,” Smalltalk Report, Vol. 5, No. 3 November/December 1995, pp. 15-17. (A n90) ANSI, American National Standardforlnformation Systems-Programming Language C (ANSI Document lar ANSI/ISO 9899: 1990), New York, NY: American National Standards Institute, 1990. iue (An94) American National Standard, Programming Language C++. (A aprovação e o trabalho técnico de de- de senvolvimento estão sendo conduzidos pelo Accredited Standards Committee X3, Information Technology e seu Technical Committee X3J16, Programming Language C++, respectivamente. Para maiores deta lhes entre em contato com X3 Secretariat, 1250 Eye Street, NW, Washington, DC 20005, EUA.) (An92) Anderson, A. E., and W. J. Heinze, C++ Programming and Fundamental Concepts, Englewood Cliffs, na NJ: Prentice Hali, 1992. (Ba92) Baker, L., C Mathematical Function Handbook, New York, NY: McGraw HilI, 1992. (Ba93) Bar-David, T., Object-Oriented Design for C++, Englewood Cliffs, NJ: Prentice Hail, 1993. (Be94) Beck, K., “Birds, Bees, and Browsers-Obvious Sources of Objects,” The Smalltalk Report, Vol. 3, No. 8 June l994,p. 13. (Be93a) Becker, P., Conversion Confusion, C++ Report, October 1993, pp. 26-28. (Be93) Becker, P., “Shrinking the Big Switch Statement,” Windows Tech Journal, Vol. 2, No. 5, May 1993, pp. 26-33. ue (Bd93) Berard, E. V., Essays on Object Oriented Software Engineering: Volume!, Englewood Cliffs, NJ: Prentice Hail, 1992. (Bi95) Binder, R. V., “State-Based Testing,” Object Magazine, Vol. 5, No. 4, August 1995, pp. 75-78. (Bi95a) Binder, R. V., “State-Based Testing: Sneak Paths and Conditional Transitions,” Object Magazine, Vol. 5, No. 6, October 1995, pp. 87-89. (B192) Blum,A., NeuralNetworksin C++:An Object-OrientedFrameworkforBuilding ConnectionistSystems, New York, NY: John Wiley & Sons, 1992. -+ (Bo91) Booch, G., Object-Oriented Design with Applications, Redwood City, CA: The Benjamin/Cummings Publishing Company, mc., 1991. (Bo94) Booch, G., Object-Oriented Analysis and Design, Second Edition, Reading, MA: Addison-Wesley Publishing Company, 1994. (Bo96) Booch, G., Object Solutions, Reading, MA: BenjaminlCummings, 1996. (Ca92) Cargill, T., Programming Style, Reading, MA: Addison-Wesley Publishing Company, 1992. (Ca95) Carroli, M. D., and M. A. Ellis, Designing and Coding Reusable C++, Reading, MA: Addison-Wesley Publishing Company, 1995. (Co95) Coplien, J. O., and D. C. Schmidt, Pattern Languages of Program Design, Reading, MA: AddisonWesley Publishing Company, 1995. 1058 BIBLIOGRAFIA (C++98) ANSI/ISO/IEC: International Standard: Programming Languages-C++. 1SO/IEC 14882:1998(E). Publicado pelo the American Nationai Standards Institute, New York, NY: 1998. (De90) Deitei, H. M., Operating Systems, Second Edition, Reading, MA: Addison-Wesley, 1990. (DeOO) Deitei, H. M., and P. J. Deitei, Java How to Program, Third Edition, Upper Saddle River, NJ: Prentice Hali, 2000. (DeOOa) Deitei, H. M., and P. J. Deitei, The Java Multimedia Cber Classroom, Third Edition, Upper Saddie River, NJ: Prentice Hali, 2000. (DeOi) Deitei, H. M., and P. J. Deitei, CHow to Program (Third Edition), Upper Saddle River, NJ: Prentice Haii, 2000. (Du9 1) Duncan, R., “inside C++: Friend and Virtual Functions, and Muitiple Inheritance,” PC Magazine, Vol. 10, No. 17, October 15, 1991, pp. 417-420. (Ei90) Eliis, M. A., and B. Stroustrup, TheAnnotated C++ Refrrence Manual, Reading, MA: Addison-Wesley, i990. (Em92) Embley, D. W.; B. D. Kurtz; and S. N. Woodfield, Object-Oriented SystemsAnalysis, Englewood Ciiffs, NJ: Yourdon Press, 1992. (En90) Entsminger, G., The Tao of Objects: A Beginner’s Guide to Object-Oriented Programming, Redwood City, CA: M&T Books, 1990. (F193) Fiamig, B., Practi cal Data Structures in C++, New York, NY: John Wiiey & Sons, 1993. (Ga95) Gamma, E,; R. Heim; R. Johnson; and J. Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Reading, MA: Addison-Wesiey Pubiishing Company, 1995. (Ge89) Gehani, N., and W. D. Roome, The Concurrent C Programming Language, Summit, NJ: Silicon Press, 1989. (Gi92) Giancoia, A., and L. Baker, “Bit Arrays with C+÷,” The C Users Journal, Voi. 10, No. 7, Juiy, 1992, pp. 2 1-26. (G195) Giass, G., and B. Schuchert, The STL <Primer>, Upper Saddle River, NJ: Prentice Hali PTR, i995. (Go95) Gooch, T., “Obscure C++,” Inside Microsofi Visual C++, Voi. 6, No. ii, November 1995, pp. 13-15. (Ha90) Hansen, T. L., The C++ AnswerBook, Reading, MA: Addison-Wesiey, 1990. (He97) Henricson, M., and E. Nyquist, Industrial Strength C++: Rules and Recommendations, Upper Saddle River, NJ: Prentice Haii, 1997. (Ja93) Jacobson, 1., “Is Object Technoiogy Software’s Industrial Piatform?” !EEE Software Magazine, Vol, 10, No. 1, January 1993, pp. 24-30. (Ja89) Jaeschke, R., Portability and the C Language, Indianapolis, IN: Hayden Books, 1989.(Ke88) Kernighan, B. W., and D. M. Ritchie, The CProgramming Language (Second Edition), Englewood Ciiffs, NJ: Prentice Haii, 1988. (Kn92) Knight, A., “Encapsulation and Information Hiding’ The Smalltalk Report, Vol. i, No. 8, June 1992, pp. 19-20. (Ko90) Koenig, A., and B. Stroustrup, “Exception Handling for C++ (revisado),” Proceedings ofthe USENIX C++ Conference, San Francisco, CA, Aprii 1990. (Ko91) Koenig, A., “What is C++ Anyway?” Journal of Object-Oriented Prograinming, April/May 1991, pp. 48-52. (Ko94) Koenig, A., Impiicit Base Ciass Conversions,” C++ Report, Vol. 6, No. 5, June 1994, pp. 18-19. (Ko97) Koenig, A., and B. Moo, Ruminations on C++, Reading, MA: Addison-Wesiey, 1997. (Kr9 1) Kruse, R. L.; B. P. Leung; and C. L. Tondo, Data Structures and Program Design in C, Englewood Ciiffs, NJ: Prentice Haii, 1991. (Le92) Lejter, M.; 5. Meyers; and 5. P. Reiss, “Support for Maintaining Object-Oriented Programs,” ÍEEE Transactions on Software Engineering, Voi. 18, No. 12, December 1992, pp. 1045-1052. (Li91) Lippman, 5. B., C++ Primer (Second Edition), Reading, MA: Addison-Wesiey Publishing Company, 1991. (Lo93) Lorenz, M., Object-Oriented Software Deveiopment: A Practical Guide, Englewood Ciiffs, NJ: Prentice Hail, 1993. (Lo94) Lorenz, M., “A BriefLook at Inheritance Metrics,” The Smalltalk Report, Vol. 3, No. 8, June 1994, pp. 1, 4-5. (Ma93) Martin, J.. Principies of Object-Oriented Analysis and Design, Englewood Ciiffs, NJ: Prentice Hali, 1993. BIBLIOGRAFIA 1059 (Ma95) Martin, R. C., Designing Object-Oriented C++ Applications Using the Booch Method, Englewood Cliffs, NJ: Prentice 1-lali, 1995. (Ma93a) Matsche, J. J., “Object-Oriented Programming in Standard C,” Object Magazine, Vol. 2, No. 5, January/ February 1993, pp. 7 1-74. (Mc94) McCabe, T. J., and Á. H. Watson, “Combining Comprehension and Testing in Object-Oriented Development,” Object Magazine, Vol. 4, No. 1, May/April 1994, pp. 63-66. (Me88) Meyer, B., Object-OrientedSoftware Construction, C. A. R. Hoare Series Editor, Englewood Cliffs, NJ: Prentice Hali, 1988. (Me92) Meyer, B., Advances in Object-Oriented Software Engineering, Editado por D. Mandrioli e B. Meyer, Englewood Cliffs, NJ: Prentice Hail, 1992. (Me92a) Meyer, B., Eiffel: The Language, Englewood Cliffs, NJ: Prentice Hail, 1992. (Me92b) Meyers, S., Effective C++: 50 Specific Ways to Improve Your Programs and Designs, Reading, MA: Addison-Wesley Publishing Company, 1992. (Me95) Meyers, S., More Effective C++. 35 New Ways to Improve Your Programs and Designs, Reading, MÁ: Addison-Wesley Publishing Company, 1995. (Me95a) Meyers, 5., “Mastering User-Defined Conversion Functions,” C/C+÷ Users Journal, Vol. 13, No. 8, Augusi 1995, pp. 57-63. (Mu93) Murray, R., C++ Strategies and Tactics, Reading, MA: Addison-Wesley Publishing Company, 1993. (Mu94) Musser, D. R., and A. A. Stepanov, “Algorithm-Oriented Generic Libraries,” Software Practice and Experience, Vol. 24, No. 7, July 1994. (Mu96) Musser, D. R., and A. Saini, STL Tutorial and Reference Guide: C++ Programming with the Standard Template Librarv, Reading, MA: Addison-Wesley Publishing Company, 1996. (Ne95) Nelson, M., C++ Programmer’s Guide to the Standard Template Library, Foster City, CÁ: Programmers Press, 1995. (Ne920) Nerson, J. M., “Applying Object-Oriented Analysis and Design,” Communications ofthe ACM, Vol. 35, No. 9, September 1992, pp. 63-74. (Ni92) Nierstrasz, O.; S. Gibbs; and D. Tsichritzis, “Component-Oriented Software Development,” Communications oftheACM, Vol. 35, No. 9, September 1992, pp. 160-165. (P190) Pinson, L. J., and R. S. Wiener, Applications of Object-Oriented Programming, Reading, MA: AddisonWesley, 1990. (Pi93) Pittman, M., “Lessons Learned in Managing Object-Oriented Development,” IEEE Software Magazine, Vol. lO, No. 1, January 1993, pp. 43-53. (P192) Plauger, P. J., The Standard C Library, Englewood Cliffs, NJ: Prentice Hail, 1992. (P193) Plauger, D., “Making C++ Safe for Threads,” The C Users Journal, Vol. 11, No. 2, February 1993, pp. 58-62. (Po97) PohI, 1., C+ + Djstilled: A Concise ANSI/ISO Reference and Siyle Guide, Reading, MÁ: Addison-Wesley, 1997. (Po97a) PohI, 1., Object-Oriented Programming Using C++, Second Edition, Reading, MÁ: Áddison-Wesley Publishing Company, 1997. (Pr92) Press, W. H., et ai, Numerical Recipies in C, Second Edition, Cambridge, MÁ: Cambridge University Press, 1992. (Pr93) Prieto-Diaz, R., “Status Report: Software Reusability,” IEEE Software, Vol. 10, No. 3, May 1993, pp. 61- 66. (Pr92) Prince, T., “Tuning Up Math Functions,” The C Users Journal, Vol. 10, No. 12, December 1992. (Pr95) Prosise, J., “Wake Up and Smell the MFC: Using the Visual C++ Classes and Ápplications Framework,” Microsoft Systems Journal, Vol. lO, No. 6, June 1995, pp. 17-34. (Ra90) Rabinowitz, H., and C. Schaap, Portable C, Englewood Cliffs, NJ: Prentice Hali, 1990. (Re9 1) Reed, D. R., “Moving from C to C++,” Object Magazine, Vol. 1, No. 3, September/October 1991, pp. 46- 60. (Ri78) Ritchie. D. M.: S. C. Johnson: M. E. Lesk: and B. W. Kernighan. “UNIX Time-Sharing System: The C Programming Language,” The Beli System Technical Journal, Vol. 57, No. 6, Part 2, JuIy-Áugust 1978, pp. 1991-2019. (Ri84) Ritchie, D. M., “The UNIX System: The Evolution of the UNIX Time-Sharing System,” AT&T Beil Laboratories Technicaliournal, Vol. 63, No. 8, Part 2, October 1984, pp. 1577-1593. 1060 BIBLIOGRAFIA (Ro84) Rosler, L., “The UNIX System: The Evolution of C-Past and Future,” AT&T Laboratories Technical Journal, Vol. 63, No. 8, Part 2, October 1984, pp. 1685-1699. (Ro00) Robson, R., Using the STL: The C++ Standard Template Librarv, SpringerVerlag, 2000. (Ru92) Rubin, K. S., and A. Goldberg, “Object BehaviorAnalysis,” Communications of theACM, Vol. 35, No. 9, September 1992, pp. 48-62. (Ru91) Rumbaugh, J.; M. Blaha; W. Premerlani; F. Eddy; and W. Lorensen, Ohject-Oriented Modeling and Design, Englewood Cliffs, NJ: Prentice Hail, 1991. (Sa93) Saks, D., “Inheritance,” The C Users Journal, May 1993, pp. 8 1-89. (Sc99) Schildt, H., STL Programmingfrom the Ground Up, Osborne McGraw-HiIl, 1999. (Se92) Sedgwick, R., Algorithms in C++, Reading, MA: Addison-Wesley, 1992. (Se92a) Sessions, R., Class Construction in C and C++, Englewood Cliffs, NJ: Prentice Hali, 1992. (Sk93) SkelIy, C., “Pointer Power in C and C++,” The C Users Journal, Vol. li, No. 2, February 1993, pp. 93- 98. (Sm92) Smaer, S., and S. J. Melior, Object Lifecycles: Modeling the World in States, Englewood Cliffs, NJ: Yourdon Press, 1992. (Sm90) Smith, J. D.. Reusabilitv & Software Construction in C & C++, New York, NY: John Wiley & Sons, 1990. (Sn93) Snyder, A., “The Essence of Objects: Concepts and Terms,” IEEE Software Magazine, Vol. 10, No. 1, January 1993, pp. 31-42. (St95) Stepanov, A., and M. Lee, “The Standard Template Library,” Internet Distribution, Published at ftp: II butler.hpl.hp.com/stl, July 7, 1995. (St84) Stroustrup, B., “The UNIX System: Data Abstraction in C,”AT&TBeII Laboratories Technicaliournal, Vol. 63, No. 8, Part 2, October 1984, pp. 1701-1732. (St88) Stroustrup, B., “What is Object-Oriented Programming?” IEEE Software, Vol. 5, No. 3, May 1988, pp. 10-20. (St88a) Stroustrup, B., “Parameterized Types for C++, Proceedings ofthe USENÍX C++ Conference, Denver, CO, October 1988. (St9 1) Stroustrup, B., The C+ + Programming Language (Second Edition), Reading, MA: Addison-Wesley Series in Computer Science, 1991. (St93) Stroustrup, B., “Why Consider Language Extensions?: Maintaining a Delicate Balance:’ C++ Report, September 1993, pp. 44-51. (St94) Stroustrup, B., “Making a vector Fit for a Standard,” The C++ Report, October 1994. (St94a) Stroustrup, B., The Design Evolution of C++, Reading, MÁ: Addison-Wesley Publishing Company, 1994. (St97) Stroustrup, B., The C++ Programming Language, Third Edition, Reading, MA: Addison-Wesley Publishing Company, 1997. (Ta94) Taligent mc., Taligent ‘s Guide to Designing Programs: Well-Mannered Object-Oriented Design in C++, Reading, MÁ: Addison-Wesley Publishing Company, 1994. (Ta92) Taylor, D., Object-Oriented Information Systems, New York, NY: John Wiley & Sons, 1992. (To89) Tondo, C. L., and 5. E. Gimpel, The CAnswerBook, Englewood Cliffs, NJ: Prentice HaIl. 1989. (Ur92) Urlocker, Z., “Polymorphism Unbounded,” Windows Tech Journal, Vol. 1, No. 1, January 1992, pp. 11- 16. (Va95) Van Camp, K. E., “Dynamic Inheritance Using Filter Classes,” C/C++ Users Journal, Vol. 13, No. 6, June 1995, pp. 69-78. (Vi94) Vilot, M. J., “An Introduction to the Standard Template Library,” The C++ Report, Vol. 6, No. 8. October 1994. (Vo9 1) Voss, G., Object-Oriented Programming: An Introduction, Berkeley, CÁ: Osbourne McGraw-Hill, 1991. (Vo93) Voss, G., “Objects and Messages,” Windows Tech Journal, February 1993, pp. 15-16. (Wa94) Wang, B. L., and J. Wang, “Is a Deep Class Hierarchy Considered Harmful?” Object Magazine, Vol. 4, No. 7. November-December 1994, pp. 35-36. (We94) Weisfeld, M., “Án Álternative to Large Switch Statements,” The C Users Journal, Vol. 12, No. 4, April 1994, pp. 67-76. (We92) Weiskamp, K., and B. Flamig, The Complete C++ Primer, Second Edition, Orlando, FL: Ácademic Press, 1992. BIBLIOGRAFIA 1061 (Wi93) Wiebel, M., and S. Halladay, “Using OOP Techniques Instead of switch in C++,” The C Users Journal, Vol. 10, No. lO, October 1993, pp. 105-112. (Wi88) Wiener, R. S., and L. J. Pinson, An introduction to Object-Oriented Programming and C++, Reading, MA: Addison-Wesley, 1988. (Wi92) Wilde, N., and R. Huitt, “Maintenance Support for Object-Oriented Programs,” ÍEEE Transactions on Software Engineering, Vol. 18, No. 12, December 1992, pp. 1038-1044. (W193) Wilde, N.; P. Matthews; and R. Huitt, “Maintaining Object-Oriented Software,” IEEE Software Magazine, Vol. 10, No. 1, ianuary 1993, pp. 75-80. (Wi96) Wilson, G. V., and P. Lu, Parailel Programming Using C++, Cambridge, MA: MIT Press, 1996. (Wt93) Wilt, N., “Templates in C÷+,” The C Users Journal, May 1993, pp. 33-5 1. (Wi90) Wirfs-Brock, R.; B. Wilkerson; and L. Wiener, Designing Object-Oriented Software, Englewood Cliffs, Ni: Prentice Hail, 1990. (Wy92) Wyatt, B. B.; K. Kavi; and S. Hufnagel, “Parallelism in Object-Oriented Languages: A Survey,” IEEE Software, Vol. 9, No. 7, November 1992, pp. 56-66. (Ya93) Yamazaki, S.; K. Kajihara; M. Ito; and R. Yasuhara, “Object-Oriented Design of Telecommunication Software,” ÍEEE Software Magazine, Vol. 10, No. 1, January 1993, pp. 81-87. A Indice Símbolos - operador unário 125 (NOT lógico) 146-149, 1016-1017 ‘=77-78 = (operador de desigualdade) 77-78, 518-519, 1016-1017 # 67-68, 856 * operador do pré-processador 860-861 #* operador do pré-processador 860- 861 $ prompt da linha de comando do UNIX 868-869 % operador módulo 74-75, 348 % prompt 868-869 & (operador dc endereço) 321-324, 1016-1017 & e * operadores como inversos 323- 324 & em uma lista de parâmetros 226-227 & para declarar referência 224-225 && (operador AND lógico) 146-147, 219, 1016-1017 &= (operador AND sobre bits com atribuição) 986-987, 1016-1017 O em uma chamada de função 194- 196 (1 operador 194-196 * (operador de derreferência de ponteiro) 322-324 * operador 74-75 * * operador de exponenciação em BASIC 518-519 + operador 72-75 ++operador 125 ++ operador sobre um iterador 923-924 ++ operador de incremento unário 125 += operador 124-125. 518-519, 893- 894 * operador 1024-1026 .h arquivos de cabeçalho 199-201 / operador 74-75 /1 comentário de uma só linha 66-67 (operador unário de resolução de escopo) 228-229, 475-476, 1012- 1013, 1026 <(operador menor que) 77-78 «deslocamento à esquerda 72-73 «operador 66-68 <= (operador menor que ou igual a) 77- 78 = operador 72-75, 148-149 == (operador de igualdade) 77-78, 148- 149, 518-519 > (operador maior que) 77-78 -> (seleção de membro através de ponteiro) 1024-1025 -> operador 1025 >= (operador maior que ou igual a) 77- 78 » deslocamento à direita 73-74 ?: (operador condicional ternário) 105- 106, 219 \ seqüência de escape com caractere barra invertida 68-69 \“ seqüência de escape com caractere aspas 68-69 \a alarme 68-69 \n seqüência de escape (nova linha) 68- 69, 642-643 \r retorno do carro 68-69 \t68-69, 179-180 (operador OR exclusivo sobre bits) 1016-10 17 ‘= (operador OR exclusivo sobre bits com atribuição) 986-987, 1016-1017 1 119-120, 1016-1017 = (operador OR inclusivo sobre bits com atribuição) 986-987, 1016-1017 II (operador OR lógico) 146-148, 219, 1016- 1017 ‘\O’ 355-356 \n’ 354-355 Numéricos <numeric> 928-929, 968, 970 O ponteiro 773-774 OX 657-65 8 Ox 657-658 A a pilha está corrompida 708-709 a repetição termina 109-111 a STL em programação genérica 1000- 1001, 1055-1056 A tartaruga e a lebre 379-380 a UML 81-82,84 a.out 61-63 aberto 728-729 abordagem de blocos de construção 56- 57, 60-61 abort 478-479, 700-701, 704-705, 708-709, 713-7 14, 86 1-862, 875-876 abortar um programa 699-700 “abordagem de código que funciona” 50-51 “abortar” 115 “aridade” de um operador 518-519 “array inteligente” 272-273 abreviando expressões de atribuição 124-125 abreviaturas semelhantes ao inglês 55- 56 abrir um arquivo inexistente 732-733 abrir um arquivo para leitura 73 1-732 abrir um arquivo para saída 731-732 abstração 82-83 abstração de dados 5 1-52, 452, 479- 480, 524-525, 589-590 ação 50-51, 105-107, 109-110, 151-152, 236-237, 479-480 ação de sair 237-23 8 accumulate 929-930, 967-968, 990- 991 acessando membros union 880-881 Acessando os membros de um objeto através de cada tipo de handie para o objeto 407-408 acessibilidade de membros da classe base em classe derivada 577-578 acesso a função 413-414 acesso a membro através de um handie 407-408 acesso a membro de classe 406-407 acesso a membro de uma estrutura 406- 407. 808-809 acesso a membro private de uma classe 412 acesso a membros de dados e funções membro não-static 478 acesso à memória inválido 875-876 acesso a variável global 228-229 acesso aos dados do chamador 224-225 acesso detault para membros de struct é publie 412-413 acesso direto 762-763 acesso indexado 940-941 acesso public por default 808 acesso verificado 892-893 acionador (software) de dispositivo 611- 612 ações a serem executadas 100-101, 110- III acrescentar a saída a um outro string 358-359 acrescentar dados a um arquivo 730-732 acumulador 381 Ada 5 8-59 adaptador 950-951 adaptador de contêiner 919-920, 926- 927, 950-951 adaptador de função 989-990 adiamento indefinido 345-346 adição 53-54, 73-76 adicionar um inteiro a um ponteiro 338- 339 adicionar uma nova conta a um arquivo 746-747 adjacent_differerice 929-930, 985 adjacentfind 929-930, 985-986 adjustfield 662-665 adulteração 230-231 Adulteração para possibilitar ligação segura quanto ao tipo 231-232 advertência 68-69 ajuste da precisão 652-653 ajuste de indicadores 657-658 ajustes originais de formatos 663-664 algoritmo 100-101, 104-106. 110-111. 116, 124-125,760,917-918,918- 919, 927-928, 955 algoritmo de “preparar-se para ir trabalhar” 100-101 algoritmo de avaliação 803-805 algoritmo de avaliação de expressão pós-fixa 791-792 algoritmo de avaliação pos-fixo 799- 800, 803-805 algoritmo de conversão de infixa para pós-fixa 791-792, 799-800, 803-805 algoritmo de distribuição 348 algorilmo de embaralhamento 812-813 algoritmo de passagem única 925-926 algoritmo de seqüência não-mutante 928-929 algoritmo em pseudocódigo 116 algoritmo numérico 990-991 algoritmo padrão 927-928 Algoritmos básicos de classificação e pesquisa da Biblioteca Padrão 969 algoritmos da biblioteca padrão 200- 201 algoritmos da STL 680-68 1 algoritmos de classificação 969 algoritmos de procura 969 algoritmos de seqüência mutante 928- 929 algoritmos genéricos 928-929 algoritmos matemáticos 965-966 algoritmos numéricos 928-929 algoritmos separados de contêiner 928- 929 <algorithm> 199-201. 935-936 alias 226-227, 322-325, 907-908 alias para o nome de um objeto 428- 429 aliaspara um tipo 92 1-922 alinhamento 76 1-762, 809-8 10, 880- 881 alinhamento em limite 76 1-762 alinhamento na memória 809-8 lO, 880- 881 alocação de espaço 544-545 alocação de memória 200-201, 918-919 alocação de memória dinâmica 714-715 alocação dinâmica de memória 471, 473-474, 76 1-764, 877-878 alocação dinâmica de memória no estilo de C 877-878 alocador 918-9 19, 936 alocador default 9 18-919 alocador personalizado 918-919 alocar dinamicamente arrays de caracteres para armazenar strings 575-577 alocar dinamicamente um array de inteiros 53 1-532, 887-888 alocar e desalocar memória dinamicamente 420-421 alterando o fluxo de controle 144-145 ambiente 191 ambiente C++ 6 1-62 ambiente chamador 73 2-733 ambiente de desenvolvimento de programas 61-62 ambiente de desenvolvimento GNU 1054- 1055 ambiente de programação 190-191 ambiente de programação C++ 190 ambiente hospedeiro 874 ambiente multiusuário 778 ambigüidade 194 196 American National Standards Committee on Computers and Information Processing (X3) 56 American National Standards institute (ANSI) 50-51, 481-482 American Standard Code for Information Interchange 360-361 análise 84 análise de texto 390-391 Análise dos resultados de um exame 122- 123 análise e projeto estruturados de sistemas 59-60 and 1016-1017 AND lógico 1016-1017 AND lógico (&&) 146-147, 185-186, 816-817 AND sobre bits 1016-1017 AND sobre bits(&)8l4-815 AND sobre bits com atribuição 1016- 1017 andeq 1016-1017 aninhamento 104-106, 129-130, 155- 156 aninhamento de estruturas de controle 102-104, 120-121 ANSI 50-51, 56. 48 1-482 ANSI C 56, 65-66 ANSI/ISO 9899: 199056 any 986-987 aparência de blocos de construção 152- 153 apelido 322-325 aplicativos de acesso instantâneo 739- 740 aplicativos distribuídos cliente/servidor 54-55 append 893-894 apresentação de caracteres 199-201 aproximação de números em ponto flutuante 120-121 área indefinida na memória 810-811 argumento 190-193 argumento da referência 324-325 argumento de função 191-193 argumento de função default 4 19-420 argumento de linha de comando 871- 872 argumento de macro 857-858 argumento default 228-229, 4 17,420 argumento para uma macro 857-858 argumentos default com construtores 4 17,420 argumentos mais à direita (finais) 228- 229 argumentos na ordem correta 194-195 argumentos passados para construtores de objetos membro 460-461 argv[] 870-871 aritmética 63 aritmética de inteiros 516 aritmética de ponteiros 338-342, 933- 934 aritmética de ponteiros é dependente de máquina 338-339 1064 ÍNDICE aritmética de ponteiros sobre um array de caracteres 339-340 aritmética de ponto flutuante 516 armazenagem livre 714-715 ARPA 63-64 ARPAnet 63-64 arquivo 727-729, 735, 808 arquivo de acesso aleatório 727, 739- 742, 744-746 arquivo de acesso seqüencial 727, 729- 730, 733-734, 738-740 arquivo de cabeçalho 199-201 408-409, 411-412,583-584, 62 1-622, 857, 873-874, 928-931, 935-937, 941-944, 946, 949-955, 968, 970, 974-976 arquivo de cabeçalho <cassert> 861- 862,478-479 arquivo de cabeçalho <cctype> 200- 201, 329-330, 858-859, 825 arquivo de cabeçalho <csdtlib> 713- 714 arquivo de cabeçalho <csignal> 875- 876 arquivo de cabeçalho <cstdio> 858- 859 arquivo de cabeçalho <cstdlib> 478- 479, 874, 877-878 arquivo de cabeçalho <exception> 706-707 arquivo de cabeçalho <fstream> 728- 729 arquivo de cabeçalho <iomanip h> 119-120 arquivo de cabeçalho <iomanip> 857, 639-640, 65 1-652, 657-658 arquivo de cabeçalho <iostream> 67-68, 200-201, 639-640, 728-729, 857, l0l0-l0l2 arquivo de cabeçalho <iostreain. h> 139- 140 arquivo de cabeçalho <memory> 714- 715 arquivo de cabeçalho <new> 711-713 arquivo de cabeçalho <s tdexcept> 716-7 17 arquivo de cabeçalho de entrada/saída em streams <iostream> 67-68 arquivo de cabeçalho definido pelo programador 199-201 arquivo de contas a receber 727-729 arquivo de estoques 727-729 arquivo de folha de pagamento 727-729 arquivo de implementação 484-485 arquivo de n bytes 729-730 arquivo de texto 745-746 arquivo de transações 756 arquivo em disco 803 arquivo objeto 62 1-622 arquivo objeto pré-compilado 484-485 arquivo seqüencial 727-730, 734-735 arquivo-fonte 873-874 arquivos de cabeçalho 432-434 arquivos de cabeçalho da biblioteca padrão 199-201, 856 arquivos de cabeçalho de contêineres da biblioteca padrão 92 1-922 arquivos de cabeçalho no “estilo antigo” 199-200 arquivos de cabeçalho padrão 191-193 arquivos de código-fonte 408-409 arquivos-fonte múltiplos 408-409 array “bruto” 480-481 Array “inteligente”929-930 array 262-264, 33 1-332, 480-483, 762- 763 Array 9 17-918 array associativo 949-950 array automático 265-267 array baseado em ponteiro no estilo de C 955-956 array bidimensional 292-298, 3 12-313, 345-346, 760 array bidimensional deck 345-346 array de caracteres 273-274, 343-344, 355-356, 522-523, 904-905 array de caracteres como um string 274- 275 array de ponteiros para funções 387-388 array de strings 345-346 array de strings suit 345-346 array dinâmico 877-878 array local automático 276-277 array m por n 292-293 array multidimensional 294 array no estilo deC 9 19-920 array unidimensional 3 26-327, 329, 335-336 arrays baseados em ponteiros 262 arrays com múltiplos subscritos 292- 293, 295 arrays e funções 279-281 arrays passados por referência 282-283 arrays que conhecem seu tamanho 480- 481 arredondando 119-120 arredondar 192-193 árvore 482-483, 760-761, 780-781, 787- 788 árvore balanceada 787-788 árvore binária 760, 780-78 1, 784-785, 981, 983-984 árvore binária com duplicatas 793-794 árvore de pesquisa binária 780-781, 785-787, 793-794 ASCJI (American Standard Code for information Interchange) 139-140, 360-361, 645-646 aspas 67-69 aspas vazias (string nulo) 740-741 asserção 478-479 assert 478-479, 532-534, 543-544, 575-577,699-700,711-712, 861-862 <assert.h> 200-201 assign 892-893, 940-941 assinatura 198-199, 230-231, 546-547, 573,577-578,610-611,622,624-625 assinatura de uma função 198-199 assíncrono 697-698 associa da direita para a esquerda 81- 82, 126-127, 139-140 associa da esquerda para a direita 126- 127 associação l62-l63, 949-950 associações 83-84. 161-162 associações entre classes 162-163 associatividade 8 1-82, 148-149 associatividade da direita à esquerda 81-82 associatividade de operadores 75-76 associatividade não-alterada por sobrecarga 518-519 asterisco (*) 74-75, 184-185 at 893-894, 907-908, 929-930, 936, 986-987 AT&T 59-60 atender 299-300, 404-405, 412 atexit 874 ativações 302-304 atividade 237-238, 302-304 atof 829-830 atoi 801-805, 829-831 atol 829-830 ator 159-160 atribuição de array 480-481 atribuição de objetos de classes 413- 414,446-447 atribuição de ponteiro 340-34 1 atribuição de ponteiros para classe derivada a ponteiros para classe base 568-569 atribuição de string 891-892 atribuição de tring de caracteres a objetos string 543-544 atribuição de um objeto a outro 430-431 Atribuição de um objeto a outro com cópia default membro a membro 430-431 atribuição de uma estrutura a uma estrutura do mesmo tipo 808-809 atribuição de uma union a uma outra union do mesmo tipo 880-881 atribuição membro a membro 516-5 17 atribuição membro a membro default 5 16-5 17 atribuir novamente a uma referência 227-228 atribuir um iterador a outro 927 atribuiu o valor de 79-80 atributo 396, 400-401 atributo “const” 1023-1024 atributos 82-84, 161-162, 234-235, 298- 299, 366-367 atributos de classes 366 atributos de uma variável 208-209 atualizar registros no lugar 739-740 atualiLar um registro 757 áudio 639-640 auto 208-210 auto-atribuição 469-470, 534, 544-545 auto2tr 714-716 autodocumentação 70-71 automóvel 186, 188 auxflio à depuração 859-860 avaliação da esquerda para a direita 75- 77 avaliador pós-fixo 802-803, 805-806 avaliando expressões 774-775, 79 1-792 avaliando uma expressão pós-fixa 792- 793 avanço do formulário (‘ \f’) 825,
Compartilhar