Professional Documents
Culture Documents
Tipos de dados
() Elementos de programao em C 1 / 57
Sumrio
1 Tipos de dados
2 Tipos inteiros
4 Tipos complexos
5 Tipos derivados
6 Estruturas e unies
7 Tipos incompletos
8 () Elementos de programao em C 2 / 57
Tipos de dados
Tipos de dados
() Elementos de programao em C 3 / 57
Tipos de dados
Tipos de dados
Exemplo
Se o tipo de dado tipo_exem usado para caracterizar os nmeros inteiros
de 8 bits armazenados na forma de complemento-2, temos:
Especificador: tipo_exem.
Natureza: nmeros inteiros.
Tamanho: 8 bits.
Imagem: [128, 127].
Representao: complemento-2.
() Elementos de programao em C 4 / 57
Tipos de dados Tipos bsicos
char
() Elementos de programao em C 5 / 57
Tipos de dados Tipos bsicos
Caracteres char
signed char
unsigned char
Inteiros char
Inteiros sinalizados
Inteiros no sinalizados
Tipos enumerados
Reais Inteiros
Reais de ponto flutuante
Aritmticos Inteiros
Complexos
Escalares Aritmticos
Ponteiros
Agregados Estruturas
Vetores
() Elementos de programao em C 6 / 57
Tipos de dados Tipos caracteres
Tipos caracteres
() Elementos de programao em C 7 / 57
Tipos de dados Conjunto bsico de caracteres
() Elementos de programao em C 8 / 57
Tipos de dados Conjunto bsico de caracteres
Padro ASCII
0 nul 16 dle 32 48 0 64 @ 80 P 96 ` 112 p
1 sch 17 dc1 33 ! 49 1 65 A 81 Q 97 a 113 q
2 stx 18 dc2 34 " 50 2 66 B 82 R 98 b 114 r
3 etx 19 dc3 35 # 51 3 67 C 83 S 99 c 115 s
4 eot 20 dc4 36 $ 52 4 68 D 84 T 100 d 116 t
5 enq 21 nak 37 % 53 5 69 E 85 U 101 e 117 u
6 ack 22 syn 38 & 54 6 70 F 86 V 102 f 118 v
7 bel 23 etb 39 55 7 71 G 87 W 103 g 119 w
8 bs 24 can 40 ( 56 8 72 H 88 X 104 h 120 x
9 ht 25 em 41 ) 57 9 73 I 89 Y 105 i 121 y
10 lf 26 sub 42 * 58 : 74 J 90 Z 106 j 122 z
11 vt 27 esc 43 + 59 ; 75 K 91 [ 107 k 123 {
12 ff 28 fs 44 , 60 < 76 L 92 \ 108 l 124 |
13 cr 29 gs 45 - 61 = 77 M 93 ] 109 m 125 }
14 so 30 rs 46 . 62 > 78 N 94 ^ 110 n 126 ~
15 si 31 us 47 / 63 ? 79 O 95 _ 111 o 127 del
() Elementos de programao em C 8 / 57
Tipos de dados Caracteres multibytes
Caracteres multibytes
() Elementos de programao em C 9 / 57
Tipos de dados Caracteres multibytes
Caracteres multibytes
Exemplo
O padro JIS X 208 define uma codificao em que cada caractere japons
representado por um par de caracteres do conjunto bsico de caracteres.
Neste padro o caractere representado pelos caracteres p e 6.
1 A sequncia <ESC>, $ e B inicia o estado em que os caracteres so
interpretados segundo o padro JIS X 208.
2 A sequncia <ESC>, ( e B termina o estado JIS X 208.
Desse modo, a sequncia
p 6 p <ESC> $ B p 6 <ESC> ( B p 6 n
Caracteres multibytes
Exemplo
O padro JIS X 208 define uma codificao em que cada caractere japons
representado por um par de caracteres do conjunto bsico de caracteres.
Neste padro o caractere representado pelos caracteres p e 6.
1 A sequncia <ESC>, $ e B inicia o estado em que os caracteres so
interpretados segundo o padro JIS X 208.
2 A sequncia <ESC>, ( e B termina o estado JIS X 208.
Desse modo, a sequncia
p 6 p <ESC> $ B p 6 <ESC> ( B p 6 n
p 6 p p 6 n
Padro Unicode
() Elementos de programao em C 11 / 57
Tipos de dados Caracteres estendidos
Caracteres estendidos
() Elementos de programao em C 12 / 57
Tipos inteiros
Valores adotados pelo compilador gcc para uma arquitetura de 32 bits e complemento-2
para representao de negativos.
() Elementos de programao em C 13 / 57
Tipos inteiros
() Elementos de programao em C 14 / 57
Tipos inteiros
signed char short int int long int long long int
() Elementos de programao em C 14 / 57
Tipos reais de ponto flutuante
sinal
expoente mantissa
() Elementos de programao em C 15 / 57
Tipos reais de ponto flutuante
sinal
expoente mantissa
() Elementos de programao em C 15 / 57
Tipos reais de ponto flutuante
() Elementos de programao em C 16 / 57
Tipos reais de ponto flutuante
() Elementos de programao em C 17 / 57
Tipos complexos
Tipos complexos
Compostos de duas partes: real e imaginria.
() Elementos de programao em C 18 / 57
Tipos complexos
Tipos complexos
Compostos de duas partes: real e imaginria.
() Elementos de programao em C 18 / 57
Tipos complexos
Tipos complexos
() Elementos de programao em C 19 / 57
Tipos derivados
Tipos derivados
() Elementos de programao em C 20 / 57
Estruturas e unies Tipo estrutura
Tipo estrutura
() Elementos de programao em C 21 / 57
Estruturas e unies Tipo estrutura
Tipo estrutura
() Elementos de programao em C 22 / 57
Estruturas e unies Tipo estrutura
Tipo estrutura
struct { struct {
int a ; int a ;
char b ; char b ;
} aux , cod ; } taxa ;
() Elementos de programao em C 23 / 57
Estruturas e unies Tipo estrutura
Tipo estrutura
struct exem {
int a ;
struct exem taxa ;
char b ;
} aux , cod ;
Agora a varivel taxa possui o mesmo tipo que as variveis aux e cod.
A expresso struct exem refere-se mesma estrutura declarada
anteriormente com a etiqueta exem.
() Elementos de programao em C 24 / 57
Estruturas e unies Tipo unio
Tipo unio
Vlida Invlida
union { union {
char cod , tp ; char cod , tp ;
int valor ; static int valor ;
double taxa ; double taxa = 2.3;
} }
() Elementos de programao em C 25 / 57
Estruturas e unies Tipo unio
Tipo unio
union { union {
int a ; int a ;
char b ; char b ;
} aux , cod ; } taxa ;
() Elementos de programao em C 26 / 57
Estruturas e unies Tipo unio
Tipo unio
union exem {
int a ;
union exem taxa ;
char b ;
} aux , cod ;
Agora a varivel taxa possui o mesmo tipo que as variveis aux e cod.
A expresso union exem refere-se mesma unio declarada anteriormente
com a etiqueta exem.
() Elementos de programao em C 27 / 57
Estruturas e unies Campos de bits
Campos de bits
Os campos de bits so componentes de estruturas e unies
No so tipos de dados: apenas designam um nmero determinado de
bits interpretados como um valor d um tipo inteiro.
A quantidade de bits de um campo de bits no pode exceder o
tamanho do tipo inteiro especificado.
Exemplo
struct {
struct { union {
_Bool estado :1;
char op ; char op ;
char op ;
unsigned int valB : 5; int : 5;
int valA : 4;
} }
}
() Elementos de programao em C 28 / 57
Tipos incompletos
Tipos incompletos
() Elementos de programao em C 29 / 57
Tipos incompletos
Tipos incompletos
void
Especifica um conjunto de valores vazio. um tipo incompleto que no
pode ser completado.
() Elementos de programao em C 29 / 57
Representao dos valores
byte byte
x x 0 0 1 1 0 0 0 0 0 1 0 1
() Elementos de programao em C 30 / 57
Representao dos valores
Valorao e preenchimento
Bits de
preenchimento valorao
() Elementos de programao em C 31 / 57
Representao dos valores
() Elementos de programao em C 32 / 57
Representao dos valores Representao dos inteiros
() Elementos de programao em C 33 / 57
Representao dos valores Representao dos inteiros
Exemplo
Se o tamanho do byte igual a 7 bits e o tipo unsigned short definido
com 8 bits, ento todo valor desse tipo ocupa 14 bits.
A tabela a seguir mostra duas possveis configuraes de bits para
armazenar o valor 73:
Preenchimento Valorao
0 0 0 0 0 0 0 1 0 0 1 0 0 1
0 1 0 1 0 1 0 1 0 0 1 0 0 1
() Elementos de programao em C 33 / 57
Representao dos valores Representao dos inteiros
() Elementos de programao em C 34 / 57
Representao dos valores Representao dos inteiros
Exemplo
Se o tamanho do byte igual a 7 bits e o tipo signed short definido
com 8 bits, ento todo valor desse tipo ocupa 14 bits.
A tabela a seguir mostra duas possveis configuraes de bits para
armazenar o valor 84 (negativos em complemento-2):
Sinal
Preenchimento Valorao
1 0 0 0 0 0 0 0 1 0 1 1 0 0
1 0 1 0 1 0 1 0 1 0 1 1 0 0
() Elementos de programao em C 34 / 57
Representao dos valores Caracteres
() Elementos de programao em C 35 / 57
Representao dos valores Estruturas e unies
Representao de estruturas
() Elementos de programao em C 36 / 57
Representao dos valores Estruturas e unies
Representao de estruturas
Exemplo
struct {
Considerando os alinhamentos: float val ;
float = 4 bytes, char = 1 byte, char estado ;
estrutura = 4 bytes float juro ;
} aux ;
() Elementos de programao em C 36 / 57
Representao dos valores Estruturas e unies
Representao de unies
() Elementos de programao em C 37 / 57
Representao dos valores Estruturas e unies
Representao de unies
Exemplo
sit
sal
4 bytes
() Elementos de programao em C 37 / 57
Representao dos valores Campos de bits
() Elementos de programao em C 38 / 57
Representao dos valores Campos de bits
Campos de bits
Exemplo
struct {
Considerando o tamanho da unidade int cbA : 3;
int cbB : 2;
enderevel = 8 bits. int cbC : 6;
}
ou como:
() Elementos de programao em C 39 / 57
Converso de tipos
Converso de tipos
Expansiva
Restritiva
() Elementos de programao em C 40 / 57
Converso de tipos Tipo inteiro em tipo inteiro
() Elementos de programao em C 41 / 57
Converso de tipos Tipo inteiro em tipo inteiro
Reduo mdulo 2N
Equivale a subtrair 2N do valor, repetidas vezes, at que o resultado
esteja na faixa [0, 2N 1].
() Elementos de programao em C 42 / 57
Converso de tipos Tipo inteiro em tipo inteiro
Exemplo
Considerando o tamanho do tipo unsigned short int = 16, converter o
valor 73.538 do tipo int no tipo unsigned short int.
() Elementos de programao em C 43 / 57
Converso de tipos Tipo inteiro em tipo inteiro
Exemplo
Considerando o tamanho do tipo unsigned short int = 16, converter o
valor 73.538 do tipo int no tipo unsigned short int.
() Elementos de programao em C 43 / 57
Converso de tipos Tipo inteiro em tipo inteiro
Exemplo
() Elementos de programao em C 44 / 57
Converso de tipos Tipo inteiro em tipo inteiro
Exemplo
() Elementos de programao em C 44 / 57
Converso de tipos Tipo inteiro em tipo inteiro
Converses expansivas
signed char short int, int, long int ou long long int
short int int, long int ou long long int
int long int ou long long int
long int long long int
unsigned char unsigned short int, unsigned int,
unsigned long int ou unsigned long long int
unsigned short int unsigned int, unsigned long int ou
unsigned long long int
unsigned int unsigned long int ou unsigned long long int
unsigned long int unsigned long long int
() Elementos de programao em C 45 / 57
Converso de tipos Tipo inteiro em tipo real de ponto flutuante
() Elementos de programao em C 46 / 57
Converso de tipos Tipo inteiro em tipo real de ponto flutuante
Exemplo
Considerando que o tipo float possui expoente de 8 e mantissa de 23
dgitos, os trs inteiros representveis exatamente a partir de
224 = 16.777.216 so:
representao binria
s expoente mantissa valor decimal
0 10010111 00. . . 00 = (1 + 0 21 + . . . + 0 223 ) 224 = 16.777.216
0 10010111 00. . . 01 = (1 + 0 21 + . . . + 1 223 ) 224 = 16.777.218
0 10010111 00. . . 10 = (1 + 0 21 + . . . + 1 222 ) 224 = 16.777.220
() Elementos de programao em C 47 / 57
Converso de tipos Tipo real de ponto flutuante em tipo inteiro
() Elementos de programao em C 48 / 57
Converso de tipos Tipo real de ponto flutuante em tipo inteiro
Exemplo
Usando complemento-2 para representar os valores negativos e
considerando o tamanho do tipo short int = 16 bits, Os valores desse
tipo esto na faixa [32.768, 32.767].
Logo,
() Elementos de programao em C 49 / 57
Converso de tipos Real de ponto flutuante em Real de ponto flutuante
() Elementos de programao em C 50 / 57
Converso de tipos Real de ponto flutuante em Real de ponto flutuante
() Elementos de programao em C 50 / 57
Converso de tipos Envolvendo tipos complexos
() Elementos de programao em C 51 / 57
Converso de tipos Envolvendo tipos complexos
() Elementos de programao em C 51 / 57
Converso de tipos Envolvendo tipos complexos
() Elementos de programao em C 51 / 57
Converso de tipos Envolvendo o tipo booliano
() Elementos de programao em C 52 / 57
Converso de tipos Envolvendo o tipo booliano
() Elementos de programao em C 52 / 57
Promoo inteira
Promoo inteira
Regra
Se o valor puder ser representado como um valor do tipo int, ele
convertido em int. Caso contrrio, ele convertido em unsigned int.
() Elementos de programao em C 53 / 57
Promoo inteira Ordenamento de inteiros
Ordenamento de inteiros
() Elementos de programao em C 54 / 57
Compatibilidade de tipos
Compatibilidade de tipos
Os tipos em uma mesma linha so compatveis representam o mesmo
tipo:
void.
char.
signed char.
unsigned char.
short, signed short, short int e signed short int.
unsigned short e unsigned short int.
int, signed e signed int.
unsigned e unsigned int.
long, signed long, long int e signed long int.
unsigned long e unsigned long int.
long long, signed long long, long long int e signed long long int.
unsigned long long e unsigned long long int.
float.
double.
long double.
_Bool.
float _Complex.
double _Complex.
long double _Complex.
() Elementos de programao em C 55 / 57
Tipos predefinidos
Tipos predefinidos
() Elementos de programao em C 56 / 57
Bibliografia
Bibliografia
ISO/IEC
C Programming Language Standard
ISO/IEC 9899:2011, International Organization for Standardization;
International Electrotechnical Commission, 3rd edition, WG14/N1570
Committee final draft, abril de 2011.
Francisco A. C. Pinheiro
Elementos de programao em C
Bookman, Porto Alegre, 2012.
www.bookman.com.br, www.facp.pro.br/livroc
() Elementos de programao em C 57 / 57