You are on page 1of 12

CARACTERES

El conjunto de caracteres que se pueden usar en un programa C++ para dar


nombre a variables, constantes, funciones, clases, etc, etc son los siguientes:

- Letras maysculas y minsculas de la A(a) a la Z(z) del alfabeto ingls.

- Dgitos del 0 al 9.

- El carcter subrayado o guin bajo _

- Caracteres especiales y signos de puntuacin:


+ - * / = % & # ! ? ^ ~
\ | < > ( ) [ ] { } : ; . ,

- Espacios en blanco: Se llaman espacios en blanco a todos los caracteres cuya


misin es separar elementos de un programa.

Los caracteres espacios en blanco que pueden aparecer en un programa C++ son
los siguientes:

el espacio en blanco
tabulador horizontal
tabulador vertical
avance de pgina
nueva lnea

- Secuencias de escape: Una secuencia de escape esta formada por una barra
inversa seguida de una letra o de una combinacin de dgitos.

Una secuencia de escape siempre representa un solo carcter aunque se escriba


con dos o ms caracteres.

Se utilizan para realizar acciones como salto de lnea o para usar caracteres no
imprimibles.

Las secuencias de escape definidas en C++ son:


TIPOS DE DATOS

Los tipos de datos en C++ se clasifican en primitivos y derivados.

Los tipos de datos primitivos son los que estn definidos dentro del lenguaje.

Los tipos de datos derivados se forman a partir de los tipos primitivos.

En este tema veremos los tipos primitivos y en temas siguientes estudiaremos los
tipos derivados.

Los tipos de datos primitivos en C++ son: numricos enteros, numricos reales, tipo
lgico y tipo carcter ampliado.

Tipos de datos C++ numricos enteros


El tipo de dato numrico entero es un subconjunto finito de los nmeros enteros del
mundo real. Pueden ser positivos o negativos.
En C++ los tipos de datos numricos enteros son los siguientes:

Nmero de
Tipo de Dato Descripcin Rango
bytes tpico
short Entero corto 2 -32768 a 32767

int Entero 4 -2147483648 a +2147483647

long Entero largo 4 -2147483648 a +2147483647

char Carcter 1 -128 a 127


Con los tipos enteros pueden utilizarse los calificadores signed y unsigned. Estos
calificadores indican si el nmero tiene signo o no. Si se usan solos, sin indicar el
tipo de dato se asume int.
Por ejemplo, las siguientes declaraciones son equivalentes:
unsigned int x; equivale a: unsigned x;
Usando estos calificadores podemos tener los siguientes tipos enteros:
Nmero de
Tipo de Dato Descripcin Rango
bytes tpico
signed short Entero corto 2 -32768 a 32767
Entero corto sin
unsigned short 2 0 a 65535
signo
signed int Entero 4 -2147483648 a +2147483647

unsigned int Entero sin signo 4 0 a 4294967295

signed long Entero largo 4 -2147483648 a +2147483647


Entero largo sin
unsigned long 4 0 a 4294967295
signo
signed char Carcter 1 -128 a 127

unsigned char Carcter sin signo 1 0 a 255


Podemos ver que los datos enteros de tipo signed son equivalentes a los enteros sin
utilizar el calificador:
signed int a; es equivalente a escribir int a;
Tipos de datos numricos reales
El tipo de dato numrico real es un subconjunto finito de los nmeros reales.
Pueden ser positivos o negativos.
En C++ los tipos de datos numricos reales son los siguientes:

Tipo de Nmero de
Descripcin Rango
Dato bytes tpico
Real (Nmero en Positivos: 3.4E-38 a 3.4E38
float 4
coma flotante) Negativos: -3.4E-38 a -3.4E38
Real doble(Nmero
Positivos: 1.7E-308 a 1.7E308
double en coma flotante de 8
Negativos: -1.7E-308 a -1.7E308
doble precisin)
Positivos: 3.4E-4932 a 1.1E4932
long
Real doble largo 10 Negativos: -3.4E-4932 a -1.1E4932
double

Tipo lgico
Los datos de este tipo slo pueden contener dos valores: true false (verdadero
falso).
Si se muestran como enteros, el valor true toma el valor 1 y false el valor 0.

Tipo de Nmero de
Descripcin Rango
Dato bytes tpico

bool Dato de tipo lgico 1 0, 1

Tipo carcter extendido


Este tipo se utiliza para representar caracteres UNICODE. Utiliza 2 bytes a diferencia
del tipo char que solo utiliza 1.

Tipo de Nmero de
Descripcin Rango
Dato bytes tpico
wchar_t Carcter Unicode 2 0 a 65535

Operadores aritmticos.
+ Suma
- Resta
* Multiplicacin
/ Divisin
% Mdulo resto de la divisin entera
En C++ no hay operador de potenciacin. Esta operacin se realiza con la funcin
pow.
El operador % obtiene el resto de la divisin entre enteros. Requiere que los
operandos sean enteros y el segundo operando no sea nulo. Cuando se aplica el
operador % a operandos de distinto signo, la mayora de las versiones de C++
asignan al resultado el signo del primer operando.
El operador / requiere que el segundo operando no sea nulo. Si los dos operandos
son enteros se obtiene como resultado la parte entera (cociente truncado, sin
decimales).
Ejemplo de operaciones:
int a = 10, b = 3;
double v1 = 12.5, v2 = 2.0;
char c1='P', c2='T'; //Segn la tabla ASCII P=80 T=84 5=53

Expresi Valo Expresi Valo


Expresin Valor
n r n r
a+b 13 v1+v2 14.5 c1 80
a-b 7 v1-v2 10.5 c1 + c2 164
a*b 30 v1*v2 25.0 c1 + c2 + 5 169
c1 + c2 +
a/b 3 v1/v2 6.25 217
5
a%b 1
En aquellas expresiones en las que aparecen operandos de distinto tipo, C++
convierte los valores al tipo de dato de mayor precisin de todos los datos que
intervienen. Esta conversin es de forma temporal, solamente para realizar la
operacin. Los tipos de datos originales permanecen igual despus de la operacin.
Por ejemplo:
int n = 10;
double v1 = 12.5, v2;
v2 = n + v1; // da como resultado 22.5
para realizar esta operacin se convierte el valor de n a tipo double que es el tipo
de v1. Realmente n no se modifica, solo su valor es convertido para realizar la
suma.
Ms ejemplos:
int i = 7;
double f = 5.5;
char c = 'w'; // ASCII w=119 0=48

Expresin Valor Tipo

i+f 12.5 double

i+c 126 int

i + c 0 78 int

(i + c) (2 * f / 5) 123.8 double

En ocasiones resulta til convertir el valor de una expresin a un tipo de datos


diferente: esto se conoce como casting o conversin de tipos que veremos ms
adelante.
En las expresiones en las que aparecen varios operadores aritmticos, el orden de
ejecucin es siempre de mayor a menor prioridad y dentro de la misma prioridad de
izquierda a derecha. Los operadores *, / y % tienen entre ellos la misma prioridad,
siendo mayor que la de + y , que tambin tienen entre ellos la misma prioridad.
(Ver tabla al final de la entrada)
Operadores unitarios.
+ signos negativo y positivo
++ -- incremento y decremento
~ compl Complemento a 1
Estos operadores afectan a un solo operando.
El operador incremento ++ incrementa en 1 el valor de la variable.
Ejemplo:
int i = 1;
i++; // Esta instruccin incrementa en 1 la variable i.
// Es lo mismo que hacer i = i + 1; i toma el valor 2
El operador decremento - decrementa en 1 el valor de la variable.
Ejemplo:
int i = 1;
i--; // decrementa en 1 la variable i.
// Es lo mismo que hacer i = i - 1; i toma el valor 0
Los operadores incremento y decremento pueden utilizarse como prefijo o sufijo, es
decir, pueden aparecer antes o despus de la variable.
Por ejemplo:
i = 5;
i++; // i vale ahora 6
++i; // i vale ahora 7
Cuando estos operadores intervienen en una expresin, si preceden al operando (+
+i), el valor se modificar antes de que se evale la expresin a la que pertenece.
En cambio, si el operador sigue al operando (i++), entonces el valor del operando
se modificar despus de evaluar la expresin a la que pertenece.
Por ejemplo:
int x, i = 3;
x = i++;
En esta asignacin a x se le asigna el valor 3 y a continuacin i se incrementa, por
lo tanto, despus de ejecutarla: x contiene 3, i contiene 4.
Si las instrucciones son:
int x, i = 3;
x = ++i;
En esta instruccin primero se incrementa i y el resultado se asigna a x. Por lo
tanto, despus de ejecutarla: x contiene 4, i contiene 4.
Otro ejemplo:
int i = 1;
cout << i << ;
cout << ++i << ;
cout << i << ;
Estas instrucciones mostrarn por pantalla:
122
En cambio, si se cambia la posicin del operador:
int i = 1;
cout << i << endl;
cout << i++ << endl;
cout << i << endl;
Estas instrucciones mostrarn por pantalla:
1
1
2
El operador complemento a 1 ~ cambia de valor todos los bits del operando
(cambia unos por ceros y ceros por unos). Solo puede usarse con datos de tipo
entero.
Puede usarse el carcter ~ (ASCII 126) el operador equivalente compl.
Por ejemplo:
int a = 1, b = 0, c = 0;
c = ~a;
b = compl a;
Operadores relacionales y lgicos.
Los operadores relacionales comparan dos operandos y dan como resultado de la
comparacin verdadero falso.
Los operadores relacionales en C++ son:
< Menor que
> Mayor que
<= Menor o igual
>= Mayor o igual
!= not_eq Distinto
== Igual
Los operadores lgicos se utilizan con operandos de tipo lgico y dan como
resultado verdadero o falso.
Los operadores lgicos en C++ son:
&& and El resultado es verdadero si los dos operandos son verdaderos. El resultado el falso en
caso contrario. Si el primer operando es falso no se evala el segundo, ya que el
resultado ser falso.
|| or El resultado es falso si los dos operandos son falsos. Si uno es verdadero el resultado es
verdadero. Si el primer operando es verdadero no se evala el segundo.
! not Se aplica sobre un solo operando. Cambia el valor del operando de verdadero a falso y
viceversa.

Los operadores relacionales se utilizan para construir expresiones lgicas, cuyo


resultado es de tipo cierto o falso.
En C++ toda expresin numrica con un valor distinto de cero (no slo el 1) se
considera como cierta y el valor cero como falsa.
Por ejemplo, en la siguiente tabla vemos una serie de expresiones lgicas y su
valor:
int i = 7;
float f = 5.5F;
char c = w;

Expresin Resultado

(i >= 6) && (c == w) Cierto

(i >= 6) || (c == 119) Cierto

(f < 11) and (i > 100) Falso

(c != p) or ((i + f) <= 10) Cierto

i + f <= 10 Falso

i >= 6 && c == w Cierto

c != p || i + f <= 10 Cierto

Las expresiones lgicas compuestas que constan de expresiones lgicas


individuales unidas por los operadores lgicos && y || se evalan slo hasta que se
ha establecido el valor cierto o falso del conjunto.
Cuando, por ejemplo, una expresin va a ser seguro falsa por el valor que ha
tomado uno de sus operandos, C++ ya no evala el resto de expresin.
Operadores a nivel de bits
Operan con datos de tipo entero. Realizan con sus operandos las operaciones
lgicas and, or, xor y desplazamiento bit a bit.
Los operadores a nivel de bits en C++ son:
& bitand and a nivel de bits
| bitor or a nivel de bits
^ xor xor a nivel de bits
<< desplazamiento a la izquierda, rellenando con ceros a la derecha
>> desplazamiento a la derecha, rellenando con el bit de signo por la izquierda
Por ejemplo:
int a = 11, b = 7, c;
c = a & b; // 11 & 7, en binario: 1011 and 0111 = 0011 que es el 3 en decimal
cout << c << endl; // muestra 3
c = a | b;
cout << c << endl; // muestra 15
c = a ^ b;
cout << c << endl; // muestra 12
c = b << 1;
cout << c << endl; // muestra 14. Equivale a b * 2
c = b >> 1;
cout << c << endl; // muestra 3. Equivale a 3 / 2

Operadores de asignacin.
Se utilizan para asignar el valor de una expresin a una variable.
= Asignacin
+= Suma y asignacin
= Resta y asignacin
*= Producto y asignacin
/= Divisin y asignacin
%= Resto de la divisin entera y asignacin
<<= Desplazamiento a la izquierda y asignacin
>>= Desplazamiento a la derecha y asignacin
&= and_eq and sobre bits y asignacin
|= or_eq or sobre bits y asignacin
^= xor_eq xor sobre bits y asignacin
Si los dos operandos de una expresin de asignacin son de distinto tipo, el valor de
la expresin de la derecha se convertir al tipo del operando de la izquierda.
Por ejemplo, una expresin de tipo real (float, double) se truncar si se asigna a un
entero, o una expresin de tipo double se redondear si se asigna a una variable de
tipo float.
En C++ estn permitidas las asignaciones mltiples.
Ejemplo: a = b = c = 3; equivale a a = 3; b = 3; c = 3;
Ejemplo de asignaciones:
a += 3; equivale a a = a + 3;
a *= 3; equivale a a = a * 3;
En general:
variable op= expresin equivale a: variable = variable op expresin
En la siguiente tabla vemos ms ejemplos de asignaciones:
int i = 5, j = 7, x = 2, y = 2, z = 2;
float f = 5.5F, g = -3.25F;

Expresin Expresin equivalente Valor final

i += 5 i=i+5 10

f = g f=fg 8.75

j *= (i 3) j = j * (i 3) 14

f /= 3 f=f/3 1.833333

i %= (j - 2) i = i % (j 2) 0

x *= -2 * (y + z) / 3 x = x * (-2 * (y + z) / 3) -4

Operador condicional.
Lo forman los caracteres ? y :
Se utiliza de la forma siguiente:
expresin1 ? expresin2 : expresin3
Si expresin1 es cierta entonces se evala expresin2 y ste ser el valor de la
expresin condicional. Si expresin1 falsa, se evala expresin3 y ste ser el valor
de la expresin condicional.
Por ejemplo:
int i = 10, j;
j = (i < 0) ? 0 : 100;
Esta expresin asigna a j el valor 100. Su significado es: si el valor de i es menor
que 0 asigna a j el valor 0, sino asigna a j el valor 100. Como i vale 10, a j se le
asigna 100.
La instruccin anterior es equivalente a escribir:
if(i < 0)
j = 0;
else
j = 100;
Ms Ejemplos de operador condicional en C++:
int a=1, b=2, c=3;
c+=(a>0 && a<= 10) ? ++a : a/b; /* c toma el valor 5*/
int a=50, b=10, c=20;
c+=(a>0 && a<=10) ? ++a : a/b; /* c toma el valor 25*/
Otros operadores
Operador coma
La coma, usada como operador, se utiliza para encadenar varias expresiones.
Ejemplo: x=(v=3,v+5)
Equivale a: v=3
x=v+5
Ejemplo: z=26
v=(z=z+10,72/z)
Equivale a: z=26
z=z+10
v=72/z
Operador de direccin
Se representa por el smbolo & (ampersand), y su funcin es la de obtener la
direccin dnde se almacena una determinada variable.
Por ejemplo, dadas las siguientes instrucciones:
int x = 10;
cout << Valor de x: << x << endl;
cout << Direccin de la variable x: << &x << endl;
muestran por pantalla:
Valor de x: 10
Direccin de la variable x: 0x27ff44
Operador de indireccin
Se representa por un asterisco *, y su funcin es la de obtener el valor contenido
en una direccin de memoria.
Un puntero es una variable que contiene una direccin de memoria. Para definir una
variable puntero se escribe: tipo *variable.
Por ejemplo: int *p;
En el siguiente ejemplo se declara un puntero y dos variables enteras y se utiliza el
operador de indireccin para obtener el valor contenido en una direccin de
memoria.
int *p, x = 10, y = 0; //se declara el puntero p y las variable x e y
p = &x; //a p se le asigna la direccin de memoria de x
y = *p; //a y se le asigna el valor guardado en la direccin de memoria
que contiene p. Como p contiene la direccin de x, a y se le asigna el valor 10
Veremos los punteros en un tema posterior.
Operador referencia a
Una referencia es un nombre alternativo (un alias, un sinnimo) para un objeto.
La forma general de expresar una referencia es:
tipo &referencia = variable;
Por ejemplo:
float m = 30.01;
float &n = m; // n es una referencia de m
Se ha declarado la variable m como float y n como referencia de m, indicando al
compilador que en este programa m tambin tiene otro nombre ( n ).
Las operaciones realizadas sobre m se reflejan en n, y viceversa. Por lo tanto en el
programa podemos utilizar indistintamente m o n.
Una referencia no es una copia de la variable referenciada, sino que es la misma
variable con un nombre diferente.
Los operadores no operan con la referencia sino directamente sobre la variable
referenciada.
Por ejemplo:
int j = 0;
int &k = j; // k es una referencia a j;
k++;
cout << j << endl; // muestra 1
cout << k << endl; // muestra 1;
Una referencia debe ser inicializada y su valor no puede ser alterado despus de
haberla inicializado, por lo que siempre se referir al mismo objeto.
Las referencias se utilizan, por ejemplo, como alternativa a los punteros en el paso
de parmetros en las funciones.
Operador global y de resolucin de mbito
Es el operador :: y permite el acceso a una variable global que ha quedado oculta
por una variable local.
En POO se usa para indicar a qu clase pertenece un determinado mtodo.
Operador sizeof
Obtiene el tamao en bytes de un tipo de datos o de una variable previamente
declarada.
Por Ejemplo, las siguientes instrucciones:
double a;
cout << Entero-> << sizeof(int) << endl;
cout << Caracter-> << sizeof(char) << endl;
cout << Double-> << sizeof(a) << endl;

Dan como resultado:


Entero-> 4
Caracter-> 1;
Double-> 8
El operador sizeof se puede utilizar con tipos primitivos y con tipos derivados.

Prioridad y orden de evaluacin de los operadores en C++


La siguiente tabla muestra todos los operadores de C++ ordenados de mayor a
menor prioridad.
Los operadores que aparecen en la misma lnea tienen la misma prioridad.

:: Sin asociatividad
() [] . -> n++ n-- _cast typeid Izquierda a Derecha
signo ~ ! * & ++n -n sizeof new delete (tipo) Derecha a Izquierda
->* .* Izquierda a Derecha
* / % Izquierda a Derecha
+ - Izquierda a Derecha
<< >> Izquierda a Derecha
< <= > >= Izquierda a Derecha
== != Izquierda a Derecha
& Izquierda a Derecha
^ Izquierda a Derecha
| Izquierda a Derecha
&& Izquierda a Derecha
|| Izquierda a Derecha
?: Derecha a Izquierda
= += -= *= /= %= <<= >>= &= |= ^= Derecha a Izquierda
, Izquierda a Derecha