Você está na página 1de 51

Elementos de programao em C

Literais e constantes

Francisco A. C. Pinheiro, Elementos de Programao em C, Bookman, 2012.

Visite os stios do livro para obter material adicional: www.bookman.com.br e www.facp.pro.br/livroc

() Elementos de programao em C 1 / 35
Sumrio

1 Literais inteiros

2 Literais reais

3 Literais caracteres

4 Literais cadeia de caracteres

5 Literais compostos

6 Enumeraes

7 Variveis constantes

8 () Elementos de programao em C 2 / 35
Literais inteiros

Literais inteiros

Os literais inteiros exprimem nmeros inteiros como 1, 234 e 666.


Sem prefixo valor decimal.
Prefixo 0 valor octal.
Prefixo 0x ou 0X valor hexadecimal.

() Elementos de programao em C 3 / 35
Literais inteiros

Literais inteiros

Os literais inteiros exprimem nmeros inteiros como 1, 234 e 666.


Sem prefixo valor decimal.
Prefixo 0 valor octal.
Prefixo 0x ou 0X valor hexadecimal.

Exemplo
Literal inteiro Valor decimal
-12 12
354 354
-012 10 = (1 81 + 2 80 )
0354 236 = 3 82 + 5 81 + 4 80
-0x12 18 = (1 161 + 2 160 )

() Elementos de programao em C 3 / 35
Literais inteiros

Tipo dos literais inteiros

Sufixos
u ou U Literal do tipo unsigned int.
l ou L Literal do tipo long int.
ll ou LL Literal do tipo long long int.

() Elementos de programao em C 4 / 35
Literais inteiros

Tipo dos literais inteiros

Sufixos
u ou U Literal do tipo unsigned int.
l ou L Literal do tipo long int.
ll ou LL Literal do tipo long long int.

Exemplo
12u Tipo unsigned int; representa o valor 12.
3Ul Tipo unsigned long int; representa o valor 3.
0x45LL Tipo long long int; representa o valor 69.
071ull Tipo unsigned long long int; representa o valor 57.

() Elementos de programao em C 4 / 35
Literais inteiros

Tipo dos literais inteiros

O uso do sufixo apenas orienta a determinao do tipo

Sufixo Valor decimal Valor octal ou hexadecimal


int int
long int unsigned int
long long int long int
unsigned long int
long long int
unsigned long long int
l ou L long int long int
long long int unsigned long int
long long int
unsigned long long int
ll ou LL long long int long long int
unsigned long long int

() Elementos de programao em C 5 / 35
Literais inteiros

Tipo dos literais inteiros

Exemplo
Considerando a representao de negativos em complemento-2, os
tamanhos de 32 bits para os tipos int e long int e de 64 bits para o tipo
long long int, determine o tipo dos seguintes literais:

Literal inteiro Tipo


67
2147483648
2147483648uL
040000000000
0x8000000000000000

() Elementos de programao em C 6 / 35
Literais inteiros

Tipo dos literais inteiros

Exemplo
Considerando a representao de negativos em complemento-2, os
tamanhos de 32 bits para os tipos int e long int e de 64 bits para o tipo
long long int, determine o tipo dos seguintes literais:

Literal inteiro Tipo


67 int
2147483648
2147483648uL
040000000000
0x8000000000000000

() Elementos de programao em C 6 / 35
Literais inteiros

Tipo dos literais inteiros

Exemplo
Considerando a representao de negativos em complemento-2, os
tamanhos de 32 bits para os tipos int e long int e de 64 bits para o tipo
long long int, determine o tipo dos seguintes literais:

Literal inteiro Tipo


67 int
2147483648 long long int
2147483648uL
040000000000
0x8000000000000000

() Elementos de programao em C 6 / 35
Literais inteiros

Tipo dos literais inteiros

Exemplo
Considerando a representao de negativos em complemento-2, os
tamanhos de 32 bits para os tipos int e long int e de 64 bits para o tipo
long long int, determine o tipo dos seguintes literais:

Literal inteiro Tipo


67 int
2147483648 long long int
2147483648uL unsigned long int
040000000000
0x8000000000000000

() Elementos de programao em C 6 / 35
Literais inteiros

Tipo dos literais inteiros

Exemplo
Considerando a representao de negativos em complemento-2, os
tamanhos de 32 bits para os tipos int e long int e de 64 bits para o tipo
long long int, determine o tipo dos seguintes literais:

Literal inteiro Tipo


67 int
2147483648 long long int
2147483648uL unsigned long int
040000000000 long long int
0x8000000000000000

() Elementos de programao em C 6 / 35
Literais inteiros

Tipo dos literais inteiros

Exemplo
Considerando a representao de negativos em complemento-2, os
tamanhos de 32 bits para os tipos int e long int e de 64 bits para o tipo
long long int, determine o tipo dos seguintes literais:

Literal inteiro Tipo


67 int
2147483648 long long int
2147483648uL unsigned long int
040000000000 long long int
0x8000000000000000 unsigned long long int

() Elementos de programao em C 6 / 35
Literais reais

Literais reais

Os literais reais so identificados


Pelo uso do ponto decimal: 23., 0.34, 12.6
Pela notao cientfica: 2.3E1, 34e-2, .126E2

() Elementos de programao em C 7 / 35
Literais reais Notao cientfica decimal

Notao cientfica decimal

Exprime o nmero como uma potncia de 10, com o termo E ou e


introduzindo o expoente:

hSignificandoihE ihExpoentei
O valor decimal dado por

hSignificandoi 10hExpoentei

() Elementos de programao em C 8 / 35
Literais reais Notao cientfica decimal

Notao cientfica decimal

Exprime o nmero como uma potncia de 10, com o termo E ou e


introduzindo o expoente:

hSignificandoihE ihExpoentei
O valor decimal dado por

hSignificandoi 10hExpoentei

Exemplo
2.3E1 = 2, 3 101 = 23, 0
34e-2 = 34 102 = 0, 34
.126E2 = 0, 126 102 = 12, 6

() Elementos de programao em C 8 / 35
Literais reais Notao cientfica hexadecimal

Notao cientfica hexadecimal

Exprime o nmero como uma potncia de 2, na base hexadecimal, com o


termo P ou p introduzindo o expoente:

hPrefixo-hexihSignificando-hexihPihExpoentei
O valor decimal dado por

(Valor decimal do significando) 2hExpoentei

() Elementos de programao em C 9 / 35
Literais reais Notao cientfica hexadecimal

Notao cientfica hexadecimal

Exemplo
Literais reais
hexadecimais Valor representado
0x1Ap2 104, 0 = (1 161 + 10 160 ) 22
0Xd0P-1 104, 0 = (13 161 + 0 160 ) 21
0x5.2p-2 1, 28125 = (5 161 + 2 161 ) 22
0X0.29P3 1, 28125 = (0 160 + 2 161 + 9 162 ) 23

() Elementos de programao em C 10 / 35
Literais reais Tipo dos literais reais

Tipo dos literais reais

Todo literal real do tipo double, exceto se possuir o sufixo


F ou f, indicando o tipo float
L ou l, indicando o tipo long double.

Exemplo
Literal Tipo
98E-1 double
98E-1F float
0.2L long double

() Elementos de programao em C 11 / 35
Literais caracteres

Literais caracteres

Escritos entre aspas simples, representam caracteres.


Exemplo
a letra a
espao
2 dgito dois

() Elementos de programao em C 12 / 35
Literais caracteres

Literais caracteres

Quando o literal interpretado como um inteiro, obtm-se o cdigo


numrico do caractere como um valor do tipo int.
Exemplo

# include < stdio .h >


int main ( void ) {
O que impresso pelo char c = a ;
programa ao lado? printf ("% c % hhd \ n " , c , c );
return 0;
}

() Elementos de programao em C 13 / 35
Literais caracteres

Literais caracteres

Quando o literal interpretado como um inteiro, obtm-se o cdigo


numrico do caractere como um valor do tipo int.
Exemplo

# include < stdio .h >


int main ( void ) {
O que impresso pelo char c = a ;
programa ao lado? printf ("% c % hhd \ n " , c , c );
return 0;
}

Resposta: a 97

() Elementos de programao em C 13 / 35
Literais caracteres

Caracteres especiais

\b recuo de posio \a alarme


\t avano tabulao horizontal \" aspa dupla
\v avano tabulao vertical \ aspa simples
\n nova linha \\ barra invertida
\r retorno de carro \? interrogao
\f avano de formulrio

() Elementos de programao em C 14 / 35
Literais caracteres Representaes alternativas

Literais caracteres - representao octal

Os caracteres podem ser expressos como \ddd, onde ddd so dgitos octais
representando um valor do tipo unsigned char.
Exemplo
\153 corresponde ao caractere k
\046 corresponde ao caractere &
\12 corresponde ao caractere LF (nova linha)

() Elementos de programao em C 15 / 35
Literais caracteres Representaes alternativas

Literais caracteres - representao hexadecimal

Os caracteres podem ser expressos como \xdd, onde dd so dgitos


hexadecimais representando um valor do tipo unsigned char.
Exemplo
\x6B corresponde ao caractere k
\x26 corresponde ao caractere &
\xa corresponde ao caractere LF (nova linha)

() Elementos de programao em C 16 / 35
Literais caracteres Representaes alternativas

Literais caracteres - representao Unicode

Os caracteres podem ser expressos como \udddd, onde dddd so dgitos


hexadecimais representando o cdigo Unicode do caractere.
Os literais Unicode no podem conter cdigo na faixa de \uD800 a
\uDFFF.
Os literais Unicode no podem conter cdigo menores que \u00A0,
exceto os cdigos \u0024, \u0040 e \u0060.

Exemplo
\u0024 corresponde ao caractere $
\u0040 corresponde ao caractere @
\u0060 corresponde ao caractere

() Elementos de programao em C 17 / 35
Literais caracteres Representaes alternativas

Literais caracteres multibytes

Se um literal caractere contm um caractere que no faz parte do conjunto


bsico dos caracteres de execuo ou quando contm dois ou mais
caracteres, ele interpretado como um caractere multibyte.
Exemplo
olas interpretado como um caractere multibyte.

Os caracteres multibytes no devem ser usados como se fossem caracteres


bsicos.

() Elementos de programao em C 18 / 35
Literais caracteres Representaes alternativas

Literais caracteres estendidos

Os literais que representam caracteres estendidos devem ter prefixo


L,
u, quando adotada a codificao Unicode UTF-16, ou
U, quando adotada a codificao Unicode UTF-32.

Exemplo
O literal L\x456 representa corretamente o caractere estendido cujo
cdigo decimal 1.110.
A representao grfica desse caractere depende da localizao em vigor no
ambiente de execuo.

() Elementos de programao em C 19 / 35
Literais caracteres Tipo dos literais caracteres

Tipo dos literais caracteres

O tipo de um literal caractere int


O tipo de um literal caractere estendido
wchar_t
char16_t, para codificao Unicode UTF-16
char32_t, para codificao Unicode UTF-32
O tipo wchar_t declarado no cabealho stddef.h.
Os tipos char16_t e char32_t, declarados no cabealho uchar.h, foram
includos na verso 2011 do padro da linguagem.

() Elementos de programao em C 20 / 35
Literais caracteres Tipo dos literais caracteres

Tipo dos literais caracteres

O tipo de um literal caractere int


O tipo de um literal caractere estendido
wchar_t
char16_t, para codificao Unicode UTF-16
char32_t, para codificao Unicode UTF-32
O tipo wchar_t declarado no cabealho stddef.h.
Os tipos char16_t e char32_t, declarados no cabealho uchar.h, foram
includos na verso 2011 do padro da linguagem.
Os literais que representam caracteres estendidos devem ser armazenados
em variveis do tipo apropriado:
wchar_t para literais com prefixo L
char16_t para literais com prefixo u
char32_t para literais com prefixo U

() Elementos de programao em C 20 / 35
Literais cadeia de caracteres

Literais cadeia de caracteres

Os literais cadeia de caracteres so escritos entre aspas duplas.


Exemplo
456.3 Cadeia com 5 caracteres
53 Cadeia com 2 caracteres
x Cadeia com 1 caractere

() Elementos de programao em C 21 / 35
Literais cadeia de caracteres

Literais cadeia de caracteres

Os caracteres em uma cadeia de caracteres podem ser expressos das formas


j vistas.
Exemplo
O que impresso pelo programa abaixo?
# include < stdio .h >
int main ( void ){
printf (" V \ x61lor \ x20 \075 R \ u0024 23.7\ b \b ,88\ b0 .");
return 0;
}

() Elementos de programao em C 22 / 35
Literais cadeia de caracteres

Literais cadeia de caracteres

Os caracteres em uma cadeia de caracteres podem ser expressos das formas


j vistas.
Exemplo
O que impresso pelo programa abaixo?
# include < stdio .h >
int main ( void ){
printf (" V \ x61lor \ x20 \075 R \ u0024 23.7\ b \b ,88\ b0 .");
return 0;
}

Resposta: Valor = R$ 23,80.

() Elementos de programao em C 22 / 35
Literais cadeia de caracteres

Cadeias estendidas de caracteres

Quando um caractere da cadeia no faz parte do conjunto bsico dos


caracteres de execuo a cadeia considerada estendida.
Os literais cadeias estendidas de caracteres devem ser expressos com
os prefixos
L, se a cadeia possui caracteres estendidos,
u8, se os caracteres da cadeia so UTF-8,
u, se os caracteres da cadeia so UTF-16, ou
U, se os caracteres da cadeia so UTF-32.
Exemplos: Lao e Lsculo.
Existem funes prprias para lidar com cadeias de caracteres
estendidas.

Os prefixos u8, u e U foram includos na verso 2011 do padro da


linguagem.
() Elementos de programao em C 23 / 35
Literais cadeia de caracteres

Tipo dos literais cadeias de caracteres

O tipo de um literal cadeia de caracteres


char *, se a cadeia no tem prefixo ou tem prefixo u8.
O tipo de um literal cadeia estendida de caracteres
wchar_t *, se a cadeia tem prefixo L,
char16_t *, se a cadeia tem prefixo u, ou
char32_t *, se a cadeia tem prefixo U.

() Elementos de programao em C 24 / 35
Literais compostos

Literais compostos

Os literais compostos so expresses usadas para atribuir valor a variveis


do tipo por eles especificado.

hLiteralCompostoi ::= ( hNomeTipoi ) { hListaIniciaoi }

Um literal composto cria em memria um objeto no nomeado do tipo


especificado, iniciando-o com os valores da lista de iniciao.
O tipo de um literal composto o especificado em sua expresso ou o
derivado da sua lista de iniciao, se ele for especificado como um
vetor de tamanho indefinido.

() Elementos de programao em C 25 / 35
Literais compostos

Literais compostos

Exemplo
(struct r_aluno) {"Josefa, linda e bela", f, 453}
Cria uma estrutura do tipo struct r_aluno atribuindo ao seu pri-
meiro componente a cadeia Josefa, linda e bela; ao segundo, o
caractere f; e ao terceiro, o inteiro 453.
(int){5712}
Cria um objeto do tipo int e o inicia com o valor 5.712.
(char []) {"E o anjo torna: - A Morte sou!"}
Cria um vetor de caracteres iniciando-o com os caracteres da cadeia
E o anjo torna: A Morte sou!.

() Elementos de programao em C 26 / 35
Enumeraes

Enumeraes

As enumeraes so listas de constantes declaradas por meio da


palavra-chave enum.

hEnumeraoi ::= enum [hEtiquetai] { hListaEnumi [,] }

hListaEnumi ::= hCteEnumeradai | hListaEnumi , hCteEnumeradai

hCteEnumeradai ::= hIdentificador i | hIdentificador i = hExprCtei

() Elementos de programao em C 27 / 35
Enumeraes

Enumeraes

Cada constante enumerada um identificador associado a um valor fixo:


O primeiro assume o valor de sua expresso de atribuio ou o valor
zero, se ela no existir.
Os demais assumem o valor de sua expresso de atribuio ou o valor
do identificador anterior incrementado de 1, se ela no existir.

() Elementos de programao em C 28 / 35
Enumeraes

Enumeraes

Cada constante enumerada um identificador associado a um valor fixo:


O primeiro assume o valor de sua expresso de atribuio ou o valor
zero, se ela no existir.
Os demais assumem o valor de sua expresso de atribuio ou o valor
do identificador anterior incrementado de 1, se ela no existir.

Exemplo
As seguintes enumeraes so vlidas:
enum {zero, um, dois, tres, quatro, cinco}
enum {pre, nor = 4, reg = 4, sup, exc}
enum naipe {ouros = 1, copas, paus, espadas}

() Elementos de programao em C 28 / 35
Enumeraes

Tipo das enumeraes

1 O tipo de cada constante enumerada int.


2 Cada enumerao define um tipo prprio diferente dos demais.
3 O tipo de uma enumerao pode ser referido por meio da sua etiqueta.

() Elementos de programao em C 29 / 35
Enumeraes

Tipo das enumeraes

1 O tipo de cada constante enumerada int.


2 Cada enumerao define um tipo prprio diferente dos demais.
3 O tipo de uma enumerao pode ser referido por meio da sua etiqueta.

O uso de etiqueta permite declarar variveis do tipo enumerado


especificado pela etiqueta.
Em princpio, as variveis declaradas dessa forma deveriam assumir
apenas os valores da enumerao.

Exemplo
A declarao enum naipe carta; declara a varivel carta como do tipo
enumerado enum naipe.

() Elementos de programao em C 29 / 35
Variveis constantes

Variveis constantes

O uso do qualificador const


faz com que o valor da const int per ;
varivel no possa ser float const sal , taxa = 3.2 F ;

modificado.
Na ilustrao acima, as constantes per e sal no possuem valor de
iniciao. Assumem um valor indefinido ou o zero dependendo do contexto
em que so declaradas.

() Elementos de programao em C 30 / 35
Variveis constantes

Variveis constantes

O uso do qualificador const


faz com que o valor da const int per ;
varivel no possa ser float const sal , taxa = 3.2 F ;

modificado.
Na ilustrao acima, as constantes per e sal no possuem valor de
iniciao. Assumem um valor indefinido ou o zero dependendo do contexto
em que so declaradas.

Observao!
As variveis qualificadas como const no so expresses constantes.

() Elementos de programao em C 30 / 35
Macros

Macros

As macros so nomes associados a uma # define g 9.8


# define taxa 2.3
expresso por meio da construo #define. # define pi (3.1415)

() Elementos de programao em C 31 / 35
Macros

Macros

As macros so substitudas por suas expresses durante o


pr-processamento.

() Elementos de programao em C 32 / 35
Macros

Macros

As macros so substitudas por suas expresses durante o


pr-processamento.
Programa original

# include < stdio .h >


# define PI (3.1415)
# define Sigla " br "
int main ( void ) {
# define G (9.89)
printf (" pi = % f " , 2 * PI );
printf (" g = % f \ n " , G );
printf ("% s \ n " , Sigla );
return 0;
}

() Elementos de programao em C 32 / 35
Macros

Macros

As macros so substitudas por suas expresses durante o


pr-processamento.
Programa aps o pr-processamento

# include < stdio .h >


int main ( void ) {
printf (" pi = % f " , 2 * (3.1415));
printf (" g = % f \ n " , (9.89));
printf ("% s \ n " , " br ");
return 0;
}

() Elementos de programao em C 32 / 35
Literais boolianos

Literais boolianos

Os nomes true e false so definidos como macros no arquivo-cabealho


stdbool.h:

# define true 1
# define false 0

() Elementos de programao em C 33 / 35
Rtulos

Rtulos

Os rtulos so identificadores seguidos imediatamente de dois pontos.


So colocados antes de um comando, e
rotulam o comando que os segue.

Exemplo
# include < stdio .h >
int main ( void ) {
int a , b = 2;
rot1 : printf (" Digite um inteiro : ");
scanf ("% d " , & a );
rot2 :
rot3 :
if ( a > b ) {
printf ("% d > " , a ); rot4 : printf ("% d \ n " , b );
}
return 0;
}

() Elementos de programao em C 34 / 35
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 35 / 35

Você também pode gostar