CAPITULO 2 TIPOS DE DATOS EN C++
En la sección anterior vimos la forma general de un programa, un programa
sumamente sencillo. Ahora veamos un programa muy parecido al anterior:
#include <iostream.h>
int main( ){
int variable;
variable=5;
cout<<variable;
return 0;
}
Notemos en esta ocasión sólo la parte: int variable; . A esta sección se le
denomina declaración. Se trata de la declaración de una variable de nombre
“variable”.
Una variable es una posición de memoria con nombre que se usa para mantener un
valor que puede ser modificado por el programa3
. Las variables son declaradas,
usadas y liberadas. Una declaración se encuentra ligada a un tipo, a un nombre y a
un valor.
Básicamente , la declaración de una variable presenta el siguiente aspecto:
tipo nombre [=valor];
3 Herbert Schildt. C Manual de referencia.
18
Los corchetes significan que esa parte es opcional. Por ejemplo, la declaración:
int mi_variable=5;
declara una variable tipo entero de nombre “mi_variable” y le asigna el valor “5”.
C++ es sensible a mayúsculas y minúsculas, así que si el nombre de nuestra variable
empieza con una letra en mayúsculas, debemos de asegurarnos que durante el resto
del código nos refiramos a ella exactamente como la escribimos. Los nombres de las
variables no pueden usar signos de puntuación, sólo caracteres “A-Z”, “a-z”, “_“, “0-
9”, aunque ningún nombre debe comenzar con un número (0-9). Además no se
deben de repetir nombres de variables en el mismo contexto.
Además de las restricciones anteriores, existe otra, y esta tiene que ver con las
palabras reservadas del lenguaje, que no son muchas a comparación de otros
lenguajes como Basic. Las palabras que se presentan en la siguiente lista, no
pueden ocuparse como nombres de variables, funciones, u otras instrucciones
definidas por el programador.
and and_eq asm auto
bitand bitor bool break
case match char class
compl. const const_cast continue
default delete do Double
dynamic_cast else enum explicit
export extern false float
for friend goto if
inline int long mutable
namespace new not not_eq
operator or or_eq private
protected public register reinterpret_cast
return short signed sizeof
static static_cast struct switch
template this throw true
try typedef typeid typename
19
union unsigned using virtual
void volatile wchar_t while
xor xor_eq
Tabla 2 Palabras reservadas de C++
Las variables se pueden declarar en tres sitios básicos: dentro de las funciones (ya
sea la función main u otras creadas por el programador), estas variables son
llamadas locales; en la definición de parámetros de una función, como se verá más
adelante; y fuera de todas las funciones, variables globales.
Ejemplo:
#include <iostream.h>
int variable_global=10;
int main(){
int variable_local=20;
cout<<"\nprograma que muestra los usos de variables "\
"globales y locales\n"<<endl;
cout<<"la variable global tiene asignado un: "\
<<variable_global<<endl;
cout<<"\nla variable local tiene asignado un: "\
<<variable_local<<endl;
return 0;
}
Una variable global puede ser modificada en cualquier parte del programa, mientras
que una variable local sólo puede ser modificada y utilizada dentro de la función en la
que se ha declarado. Por supuesto, antes de utilizar una variable y hacer
operaciones con ella, hay que declararla.
20
Por lo general, siempre se trata de utilizar lo menos posible la declaración de
variables globales. El siguiente ejemplo muestra que se pueden declarar variables en
cualquier parte del programa, siempre y cuando se declaren antes de usarlas.
#include <iostream.h>
int main( ){
int variable1=10;
cout<<"la variable 1 local tiene almacenado un: "\
<<variable1<<endl;
variable1=50;
int variable2=variable1+30;
cout<<"\nla variable 2 almacena un: "\
<<variable2<<endl;
return 0;
}
En un programa puede que necesitemos declarar un dato y asignarle un nombre,
pero que éste no pueda ser modificado. En este caso debemos declarar una
constante.
Por ejemplo, el siguiente programa calcula el área de un círculo.
#include <iostream.h>
int main( ){
const float pi=3.141592;
int radio=5;
float area;
area=pi*radio*radio;
cout<<"el area del circulo es: "<<area<<endl;
return 0;
}
21
Declaramos una constante del tipo de datos float , le damos el nombre “pi” y le
asignamos el valor 3.141592. Este valor jamás podrá ser modificado en ninguna
parte del programa
La declaración de una constante presenta el siguiente aspecto:
const tipo nombre = valor;
TIPOS DE DATOS
Los prototipos de variables utilizados en los programas de ejemplo, hasta el
momento, han sido en su mayoría de tipo entero (int), pero es ilógico pensar que éste
sea el único que se llegue a utilizar. Además del tipo entero existen otros.
Los tipos de datos atómicos son los tipos de datos más sencillos a partir de los
cuales se pueden construir otros más complejos. La siguiente tabla ilustra estos tipos
con sus intervalos de valores posibles y el número de bytes que ocupan.
Tipo Tamaño en bytes Intervalo
short 2 -32768 a 32767
unsigned
short
2 0 a 65535
long 4 -2147483648 a 2147483647
unsigned
long
4 0 a 4294967295
int dependiendo del
compilador utilizado
podría ser 2 o 4
-32768 a 32767
unsigned
int
2 o 4 0 a 65535
float 4 1.17549535e-38 a 3.402823466e+38 con 8
cifras decimales
double 8 2.2250738585072014e-308 a
1.7976931348623158e+308 con 16 cifras
decimales
22
long
double
10
char 1 -128 a 127
unsigned
char
1 0 a 255
bool 1 Valor lógico o booleano que puede ser trae
(cierto) o false (falso).
Tabla 3 Tipos de datos en C++
En la biblioteca <limits.h> encontrará constantes definidas para los intervalos
que pueden almacenar algunos tipos de variables. Compile y ejecute el siguiente
programa, después consulte la biblioteca <limits.h> para ver más constantes
definidas.
#include <limits.h>
#include <iostream.h>
int main( ){
cout<<"PROGRAMA QUE MUESTRA LOS VALORES MAXIMOS Y "\
"MINIMOS \n DE ALGUNOS DE LOS TIPOS DE DATOS "\
"ATOMICOS"<<endl;
cout<<"\n int maximo: "<<INT_MAX<<" int minimo: "\
<<INT_MIN<<endl;
cout<<"\n char maximo: "<<CHAR_MAX<<" char minimo: "\
<<CHAR_MIN<<" tamaño en bits: "<<CHAR_BIT<<endl;
cout<<"\n long maximo: "<<LONG_MAX<<" long minimo: "\
<<LONG_MIN<<endl;
cout<<"\n short maximo: "<<SHRT_MAX<<" short minimo: "\
<<SHRT_MIN<<endl;
return 0;
}
Por medio de los ejemplos dados hasta el momento nos podemos dar una idea de la
forma en que se asignan valores a los tipos de datos numéricos. Tan sólo falta
mostrar como se pueden asignar valores en formato octal y hexadecimal. Las
siguientes instrucciones lo aclararán.
int variable1=022;
int variable2=0x12;
23
Ambas variables están almacenando el número 18, la primera en octal y la otra en
hexadecimal. También se pueden asignar números exponenciales.
float variable3=2e6;
Pero no sabemos nada sobre los de tipo char.
Para declarar y asignar un carácter a una variable se hace de la siguiente forma.
char nombre = ‘[carácter]’;
Y si es una constante sólo se agrega la palabra const al principio de la declaración.
Note que el carácter asignado está encerrado entre comillas simples. Así, la siguiente
declaración asigna la letra “A” mayúscula a una constante de nombre “inicial”.
const char inicial=’A’;
El valor (carácter) que se almacena en una variable o constante de tipo char, es el
valor entero del carácter en el juego de caracteres ASCII. Entonces a la constante
“inicial” se le asignó un valor de 65.
Para representar caracteres de control es necesario usar secuencias de escape.
Caracteres de
control
Significado
\n salto de línea
\t tabulador horizontal
\v tabulador vertical
\a alerta sonora
\0 carácter nulo
\b mueve el cursor hacia
atrás
Tabla 4 Secuencias de escape
24
Cualquier carácter se puede representar con la “\” seguida del propio carácter o del
código octal o hexadecimal. Por ejemplo las comillas dobles será ‘\”’ o ‘\042’ o ‘\x22’.
OPERACIONES BÁSICAS
En ejemplos anteriores ya hicimos uso de algunos operadores, “+” y “*”, suma y
multiplicación respectivamente.
Operado
r
Significado
+ adición
- sustracción
* multiplicación
/ división
% resto de la división
entera
Tabla 5 Operaciones básicas
El siguiente programa ilustrará mejor.
#include <iostream.h>
int main( ){
int a=5, b=10, c=20, r;
r=a+b; a=c%r; //aquí “a” valdrá 5(resto de 20/15)
c=ba; a=a*2;
cout<<"a="<<a<<" b="<<b<<" c="<<c<<" r="<<r<<endl;
cout<<"la suma de a y b es: "<<a+b<<endl;
return 0;
}
Estos operadores no son exclusivos de los tipos de datos numéricos. Un dato tipo
char también es modificable mediante operadores. Recuerde que lo que se guarda
es el código ASCII.
25
#include <iostream.h>
int main( ){
char car1='a', car2;
car2=car1+15;
cout<<"car2="<<car2<<endl;
car1=car210;
cout<<"car1="<<car1<<endl;
cout<<"la suma de los dos es:"<<car1+car2<<endl;
car1=car1car2;
cout<<"car1="<<car1<<endl;
return 0;
}
En estos dos últimos ejemplos, note las siguientes instrucciones:
a=a*2;
car1=car1car2;
Ambas pueden escribirse de una mejor forma:
a*=2;
car1=car2;
Podría decirse que es una abreviatura de código. El operador seguido de la
asignación.
Ahora conozcamos a otros operadores muy útiles. “++” y “--“. Éstos tienen la función
de aumentar y disminuir en uno al dato que opera. Pero su comportamiento depende
de si sea en prefijo (antes del operando) o sufijo (después de).
#include <iostream.h>
int main( ){
int a,b,c;
a=17*5+2; //primero resuelve la multiplicación
26
cout<<"a="<<a<<endl;
b=a++ 7; //a7=80, luego se incrementa a
cout<<"b="<<b<<endl;
c=++b * a; //se incremente b a 81,
//luego disminuye a a 87, luego evalúa b*a
cout<<"c="<<c<<endl;
return 0;
}
También puede utilizar los paréntesis (como propiedad asociativa) para guiar al
programa hacia qué operaciones debe de hacer primero. Hasta aquí, podría
considerarse que se han visto las operaciones básicas (suma, resta, multiplicación y
división). Pero no son las únicas. Aunque los siguientes operadores no le parezcan
importantes o no los comprenda por completo, más adelante se dará cuenta de sus
usos.
Operadores de desplazamiento
<
<
Desplazamiento de bits a la
izquierda
>
>
Desplazamiento de bits a la
derecha
Tabla 6 Operadores de desplazamiento
Desplazar los bits de un número entero hacia la derecha equivale a dividirlo por 2.
Veamos por qué.
… … 256 128 64 32 16 8 4 2 1
1 0 0 0 0 0 0 0 1
Esta es una simple representación de la manera en que está almacenado el número
257 en 2 bytes. Cuando aplicamos el desplazamiento de un bit a la derecha
ocasionará lo siguiente.
27
… … 256 128 64 32 16 8 4 2 1
0 1 0 0 0 0 0 0 0
Desplaza un bit a la derecha y el campo vacío lo llena con un cero. Vea el siguiente
ejemplo de aplicación.
int var=16;
var >>= 1; //ahora var tiene asignado un 8
Estos operadores también admiten la asignación de la forma “<<=” y “>>=”.No debe
confundir el uso de estos operadores con los de inserción de flujo, de las
instrucciones cin y cout (que se explicarán más adelante).
Operadores relacionales y de igualdad
Son operadores binarios que permiten comparar los valores de dos variables o
expresiones.
Operado
r
Significado
< menor que
<= menor o
igual
> mayor que
>= mayor o
igual
= = igual
!= desigual
Tabla 7 operadores relacionales y de igualdad
Estos operadores devuelven 0 si la comparación es falsa o 1 si es verdadera.
28
Operadores de bits y lógicos
Operado
r
Significado
& conjunción (Y) de
bits
^ O exclusivo de bits
| O inclusivo de bits
Tabla 8 Operadores de bits
Estos operadores también pueden operar con asignación (& =, | =, ^ =).
Operado
r
Significado
&& conjunción (Y)
lógica
| | disyunción (O)
lógica
Tabla 9 operadores lógicos
Precedencia de operadores
Símbolo Significado
:: resolución de alcance
++
--
( )
[ ]
->
.
incremento sufijo
decremento sufijo
llamada a función
elemento de tabla
acceso a miembro desde un puntero
acceso a miembro
++
--
!
~
-
+
&
*
sizeof
new
delete
(tipo)
incremento prefijo
decremento prefijo
negación lógica
complemento a uno
cambio de signo (operador unario)
identidad (operador unario)
dirección
seguir un puntero
tamaño en bytes
reserva de memoria
liberación de memoria
conversión explícita de tipos
29
.*
->*
acceso a miembros de clase
acceso a miembros de clase desde
puntero
*
/
%
multiplicación
división
resto de la división entera
+
-
suma
resta
<<
>>
desplazamiento de bits a la izquierda
desplazamiento de bits a la derecha
<
<=
>
>=
menor que
menor o igual
mayor que
mayor o igual
= =
! =
igual
desigual
& conjunción (Y) de bits
^ O exclusivo de bits
| O inclusivo de bits
&& conjunción (Y) lógica
| | disyunción (O) lógica
=
*=, /=, %=, +=, - =,
<<=, >>=,&=, ^=, |
=
asignación simple
asignaciones compuestas
?: expresión condicional
trhow lanzamiento de excepción
, separador de expresiones
Tabla 10 Precedencia de operadores en C++
No hay comentarios:
Publicar un comentario