Ostipospré-denidospelalinguagempodemservistoscomoclassesdenidaspelocriadordoC++
e que estão escondidas de você. Assim, pode-se imaginar que existem as classes: class char{},
classint{},classoat{},classdouble{}. Destaforma,umnúmerointeiroéumobjeto,umnúmero
oat éum objeto e assim pordiante. Veja oexemplo.
Exemplo:
//Esta criando dois objetos inteiros, int é o tipo
//x,y são os nomes dos objetos
int x,y;
//armazena valores nestes objetos
x = 4; y = 5;
//Esta criando um outro objeto, do tipo int, com nome z e igualando a x
int z = x;
Em resumo: você precisa entender que existe uma classe que dene os números inteiros e esta
classe fazparte de uma hierarquia,ahierarquiados tipos numéricos. A maneiracomose declara,
se dene, seusa e seelimina um objeto dotipo inteiro é semelhante aoque ocorre para todos os
outros tipos.
Ostiposnuméricos pré-denidosdalinguagemC++ estãolistadosnaTabela6.1,bemcomoo
intervalode valoressuportados (unsigned=semsinal, short=curto, long=longo). Vejana Figura
bool, char, unsigned char
short int, unsigned short
int, unsigned int, long, unsigned long, int*
long long, double,
float
Figura6.1: Tiposde dados edimensões (sizeof).
Dêumaolhadanoarquivode biblioteca<limits> 1
. Este arquivocontém variáveisquedenem
oslimites para os tipospré-denidos dalinguagem.
Tabela 6.1: Tipose intervalos.
Tipos Básicos Características bytes Valormínimo valormáximo
bool boleano 1 0 1
char caracteres 1 -128 127
unsigned char caracteres s/sinal 1 0 255
short inteiros 2 -32768 32767
unsigned short int,peq. s/sinal 2 0 65535
int inteiros 4 -2.147.483.648 +2.147.483.648
unsigned int inteirosem sinal 4 0 +4.294.295.000
long inteiro grande 4 -2.147.483.648 +2.147.483.648
unsigned long int,gde.c/sinal 4 0 +4.294.295.000
oat precisão simples,7digitos 4 3.4e-38 3.4e+38
double precisão dupla,15 digitos 8 1.7e-308 1.7e+308
long double precisão dupla,18 digitos 10 3.4e-4932 3.4e+4932
enum enumerados 2 -2.147.483.648 +2.147.483.648
A Tabela 6.2 mostra as diferenças entre as plataformas de 16 e 32 bits. Para oat, double,
long double ostamanhos não mudam.
Dica: O compiladorg++ da gnu suporta otipo long long, que representa um inteiro de 64 bits.
Ocompilador daGNU é descrito noCapítulo44.
Apresenta-se a seguir um programa que usa os tipos padrões de C++. Observe que este
exemplo não tem nem entrada, nem saída de dados, não sendo necessária a inclusão (#include)
de arquivos externos.
Listing 6.1: Tiposnuméricos de C++.
1
Veja no manual do seu ambiente de desenvolvimento onde estão armazenados os arquivos da biblioteca de
Tabela6.2: Diferenças de tamanho dos objetospadrõesde C++ nas plataformasde 16e32 bits.
16 bits 16 bits 32 bits 32 bits
enum -32768 +32768 -2.147.483.648 +2.147.483.648
unsigned int 0 65535 0 4.294.967.295
int -32768 +32768 -2.147.483.648 +2.147.483.648
int main ()
{
//Tipos padrões da linguagem
//Tipo booleano //Intervalo 0 ou 1 //1 bytes bool flag = 0; //Tipo char //Intervalo -128 -> +127 //1 bytes char ch = 'b'; //Tipo int
//2 byts (16 bits), Intervalo (16bits)~ - 32768 -> + 32767
//4 byts (32 bits), Intervalo (32bits)~ -2147483648 -> +2147483648
int int_x = 777;
//Tipo float
//Intervalo +/- 3.4.e+/-38 (7digitos precisão)
//4 bytes
float float_y = 3.212f;
//Tipo double
//Intervalo +/- 1.7e+/-308 (15 digitos precisão)
//8 bytes
double double_z = 12312.12312e5;
//Tipo long double
//Intervalo +/- 3.4e+/-4932 (18 digitos precisão)
//10 bytes
long double long_double_r = 1.2e-18;
return 0;
}
/*
Novidade:
---
Tipos: A linguagem C++ é altamente prototipada,
ou seja, dá uma importância muito grande ao tipo dos objetos.
Uso dos tipos padrões de C++
Criação de objetos numéricos e atribuição de valores a estes objetos.
Saída:
---
Este exemplo não inclue saída de dados.
*/
Observe noexemplo aseguir o uso e asdiferenças dos tipos inte unsigned int.
Listing6.2: Diferenças nouso de inteiro com sinal (signed)e sem sinal (unsigned).
#include <iostream>
void main()
{
{
std::cout << "--->Testando uso de int"<<std::endl;
int x, y, z;
std::cout <<"Entre com int x (ex: 300):"; cin >> x;
std::cout <<"Entre com int y (ex: 500):"; cin >> y;
cin.get(); z = x + y; std::cout <<"int z = x + y =" << z << std::endl; z = x - y; std::cout <<"int z = x - y =" << z << std::endl; }
std::cout << "--->Testando uso de unsigned int"<<std::endl;
unsigned int x,y,z;
std::cout <<"Entre com unsigned int x (ex: 300):"; cin >> x;
std::cout <<"Entre com unsigned int y (ex: 500):"; cin >> y; cin.get()
;
z = x + y;
std::cout <<"unsigned int z = x + y ="<< z <<std::endl;
z = x-y;
std::cout <<"unsigned int z = x - y ="<< z <<std::endl;
//faz o teste abaixo, de forma a retornar o modulo da diferença
//se x > y retorna z = x - y //se x <= y retorna z = y - x if( x > y) z = x - y ; else z = y - x ;
//armazena a informação do sinal
int sinal = x > y ? +1 : -1 ;
//Cria objeto int para armazenar o resultado, observe que sinal é do
tipo int
int valor_z = sinal * z ;
std::cout <<"z=| x - y |=" << z << std::
endl;
std::cout <<"sinal de x - y =" << sinal << std::
std::cout <<"int valor_z = sinal * z =" << valor_z << std:: endl; } /* Novidade: ---
-Uso de objeto do tipo int, com sinal (signed) e sem sinal (unsigned).
-Uso do operador de controle if...else
O operador if é usado para controlar a sequência de execução
do programa. O if avalia uma expressão, se a mesma for verdadeira
executa a linha abaixo, se a expressão for falsa, pula a linha abaixo.
if( expresao)
ação1 ;
Fora o if, você também tem o if...else
if(expresao)
ação1 ;
else
ação2;
No if...else, se a expressão for verdadeira executa ação 1,
se for falsa executa ação 2.
*/
/*
Saída:
---
[andre@mercurio lyx]$ ./a.out
--->Testando uso de int
Entre com int x (ex: 300):300
Entre com int y (ex: 500):500
int z = x + y =800
int z = x - y =-200
--->Testando uso de unsigned int
Entre com unsigned int x (ex: 300):300
Entre com unsigned int y (ex: 500):500
unsigned int z = x + y =800
unsigned int z = x - y =4294967096
z=| x - y |=200
sinal de x - y =-1
int valor_z = sinal * z =-200
*/
/*
Análise da saída:
Observe que a saída de
z = x - y = 4294967096
apresenta um valor esquisito: 4294967096
isto ocorre porque z é um inteiro sem sinal
que vai de 0-> 4294967295
como z não pode armazenar valor negativo,
z fica com o valor 4294967096
que significa:
4294967295 - 200 -1 (o zero)= 4294967096
*/
Dica: C++ temum conjuntode operadores ede estruturas de controle. Comooconceito de op-
eradores(+,-,*,...) edeestruturasde controlejásãobastanteconhecidos 2
,osmesmosforam
incluídosna parteVI daapostila. Continue lendo a apostila normalmente. Se tiverproble-
mas no entendimento de como funciona determinadooperador ouestrutura de controle, aí
sim,dê uma olhada noítem especíco naparte VI da apostila.