Relación entre C y C++ de los tipos de datos y variables.
Tipos de datos y variables en C.
Un tipo de dato define de forma explícita un conjunto de valores, denominado
dominio, sobre el cual se pueden realizar una serie de operaciones. Un valor es
un elemento del conjunto que hemos llamado dominio. Una variable es un
espacio de la memoria destinada al almacenamiento de un valor de un tipo de
dato concreto, referenciada por un nombre. Son conceptos sencillos, pero muy
necesarios para saber exactamente qué se hace cuando se crea una variable en
un programa.
Como se crea una variable en C: Toda variable debe ser declarada previa a su uso.
Declarar una variable es indicar al programa un identificador o nombre para esa
variable, y el tipo de dato para la que se crea esa variable. La declaración de variable
tiene la siguiente sintaxis: tipo var_1 [=valor1, var_2 = valor_2, …, var_N = valor_N];
Donde tipo es el nombre del tipo de variable que se desea crear, y var_1, es el nombre
o identificador de esa variable. Aclaración a la notación: en las reglas sintácticas de un
lenguaje de programación, es habitual colocar entre corchetes ([]) aquellas partes de
la sintaxis que son optativas. En este caso tenemos que en una declaración de
variables se pueden declarar una o más variables del mismo tipo, todas ellas
separadas por el operador coma.
Tipos de datos primitivos en C: sus dominios. Los tipos de dato primitivos en C
quedan recogidos en la tabla 2.1. Las variables de tipo de dato carácter ocupan 1
byte. Aunque están creadas para almacenar caracteres mediante una codificación
como la ASCII (que asigna a cada carácter un valor numérico codificado con esos 8
bits), también pueden usarse como variables numéricas. En ese caso, el rango de
valores es el recogido en la tabla 2.1. En el caso de que se traten de variables con
signo, entonces el rango va desde 27 hasta 2 1 7 .
A continuación, la tabla de Tipo de datos primitivos.
Como crear una variable tipo carácter o "char": Para crear una variable de tipo
carácter en C, utilizaremos la palabra clave char. Si la variable es con signo, entonces
su tipo será signed char, y si no debe almacenar signo, entonces será unsigned char.
Por defecto, si no se especifica si la variable es con o sin signo, el lenguaje C considera
que se ha tomado la variable con signo, de forma que decir char es lo mismo que decir
signed char. Lo habitual será utilizar variables tipo char para el manejo de caracteres.
Los caracteres simples del alfabeto latino se representan mediante este tipo de dato.
El dominio de las variables char es un conjunto finito ordenado de caracteres, para el
que se ha definido una correspondencia que asigna, a cada carácter del dominio, un
código binario diferente de acuerdo con alguna normalización. El código más
extendido es el código ASCII (American Standard Code for Information Interchange).
Como crear una variable tipo entero:Las variables tipo entero, en C, se llaman
int. Dependiendo de que esas variables sean de dos bytes o de cuatro bytes
las llamaremos de tipo short int (16 bits) ó de tipo long int (32 bits). Y para
cada una de ellas, se pueden crear con signo o sin signo: signed short int y
signed long int, ó unsigned short int y unsigned long int. De nuevo, si no se
especifica nada, C considera que la variable entera creada es con signo, de
forma que la palabra signed vuelve a ser opcional.En general, se recomienda
el uso de la palabra signed. Utilizar esa palabra al declarar enteros con signo
facilita la compresión del código. El tamaño de la variable int depende del
concepto, no introducido hasta el momento, de longitud de la palabra.
Habitualmente esta longitud se toma múltiplo de 8, que es el número de bits
del byte. De hecho la longitud de la palabra viene definido por el máximo
número de bits que puede manejar el procesador, cuando hace un calculo.
¡Que pasa si se declara una variable de tipo int sin determinar si
es short o long?... Si se declara una variable en un PC como de
tipo int (sin determinar si es short o long), el compilador de C
considerará que esa variable es de la longitud de la palabra: de
16 o de 32 bits. Es importante conocer ese dato (que depende
del compilador), o a cambio es mejor especificar siempre en el
programa si se desea una variable corta o larga, y no dejar esa
decisión al tamaño de la palabra.
Operadores relacionales y lógicos. Los operadores
relacionales y los operadores lógicos crean
expresiones que se evalúan como verdaderas o falsas.
En muchos lenguajes existe un tipo de dato primitivo
para estos valores booleanos de verdadero o falso. En
C ese tipo de dato no existe. El lenguaje C toma como
falsa cualquier expresión que se evalúe como 0. Y
toma como verdadera cualquier otra evaluación de la
expresión. Y cuando en C se evalúa una expresión con
operadores relacionales y/o lógicos, la expresión
queda evaluada a 0 si el resultado es falso; y a 1 si el
resultado es verdadero.
Los operadores relacionales son seis: igual que (―==‖), distintos (―!=‖) ,
mayor que (‗>‘), mayor o igual que (―>=‖), menor que (‗<‘) y menor o
igual que (―<=‖). Todos ellos se pueden aplicar a cualquier tipo de dato
primitivo de C. Una expresión con operadores relacionales sería, por
ejemplo, a != 0, que será verdadero si a toma cualquier valor diferente al
0, y será falso si a toma el valor 0. Otras expresiones relacionales serían,
por ejemplo, a > b + 2; ó x + y == z + t; Con frecuencia interesará evaluar
una expresión en la que se obtenga verdadero o falso no solo en función
de una relación, sino de varias. Por ejemplo, se podría necesitar saber
(obtener verdadero o falso) si el valor de una variable concreta está entre
dos límites superior e inferior. Para eso necesitamos concatenar dos
relacionales. Y eso se logra mediante los operadores lógicos.
Un error frecuente (y de graves consecuencias en la ejecución del programa) al
programar en C ó C++ es escribir el operador asignación (‗=‘), cuando lo que se
pretendía escribir era el operador relacional ―igual que‖ (―==‖). El C ó C++ la
expresión variable = valor; será siempre verdadera si valor es distinto de cero. Si
colocamos una asignación donde deseábamos poner el operador relacional ―igual
que‖, tendremos dos consecuencias graves: se cambiará el valor de la variable
colocada a la izquierda del operador asignación (cosa que no queríamos) y, si el
valor de la variable de la derecha es distinto de cero, la expresión se evaluará como
verdadera al margen de cuáles fueran los valores iniciales de las variables. Los
operadores lógicos son: AND, cuyo identificador está formado por el carácter
repetido ―&&‖; OR, con el identificador ―||‖; y el operador negación, cuyo
identificador es el carácter de admiración final (‗!‘).
Tabla de resultados de los operadores lógicos.
operadores lógicos. Operador OR EXCLUSIVO, ó XOR a nivel de bit. Su
identificador es un carácter ‗^‘. Se aplica sobre variables del mismo tipo,
con la misma longitud de bits. Bit a bit compara los dos de cada misma
posición y asigna al resultado un 1 en ese bit en esa posición si los dos
bits de las dos variables tienen valores distintos: el uno es 1 y el otro 0, o
viceversa; si los dos bits son iguales, asigna a esa posición del bit el valor
0.
Tipos de datos y variables en C++.
Todos los programas necesitan, en algún momento,
almacenar números o datos ingresado por el usuario. Estos
datos son almacenados en variables, y en C++ como en otros
lenguajes estas variables deben tener un tipo.
Los tipos de variables son.
Existen varios tipos de variables, y cada uno corresponde a
un tamaño máximo de un número, un carácter o incluso una
verdad. Cuanto mayor sea el número que pueda admitir, mas
espacio en memoria ocupará.
Bool: Por lo general utiliza
1 byte de memoria,
valores: true o false.
Char: Utiliza generalmente 1
byte de memoria, permite
almacenar un carácter,
valores; 256 caracteres.
Unsigned short int: Utiliza
generalmente 2 bytes de memoria,
valores: de 0 a 65 535
Short int: Utiliza generalmente 2
bytes de memoria, valores: de
-32768 a 32767.
Unsigned long int: Utiliza
generalmente 4 bytes de memoria,
valores: de 0 a 4 294 967 295.
Long int: Utiliza generalmente 4
bytes de memoria, valores: de -2
147 483 648 a 2 147 483 647.
Int (16 bits): Utiliza
generalmente 2 bytes de
memoria, valores: de -32 768 a
32 767.
Int (32 bits): Utiliza generalmente
4 bytes de memoria, valores: de -2
147 483 648 a 2 147 483 647.
Unsigned int (16 bits): Utiliza
generalmente 2 bytes de
memoria, valores: de 0 a 65 535.
Unsigned int (32 bits): Utiliza
generalmente 2 bytes de memoria,
valores: de 0 a 4 294 967 295.
Double: Utiliza generalmente 8 bytes de
memoria, valores: de 2.2e-308 a 3.4e-38.
Float: Utiliza generalmente 4 bytes de memoria, valores: de
1.2e-308 a 3.4e-38. Atención! El tamaño de las variables en
memoria puede variara de un PC a otro.
Declaración y asignación de variables.
Declaración. Para declarar una variable, basta con indicar su
tipo y su nombre. Existen ciertas convenciones en cuanto al
nombre de las variables. Algunos prefieren separar las partes
de un nombre con '_', otros prefieren escribir una mayúscula
para separarlas. Ejemplo: int recetaDelMes; ó int
receta_del_mes;
Asignar un valor. Es posible asignar un valor a una variable al
momento de declararla: int recetaDelMes = 12301;... También
es posible declarar varias variables en una misma línea, pero
en este caso, todas las variables de la línea tendrán el mismo
tipo. int recetaDelMes = 12301, recetaDelAño = 45644545;.
Errores al definir tipos de variables
(Enteros con signo).
¿Qué pasa si el tipo que hemos elegido es muy pequeño?... Si
el número es mayor al máximo admitido por el tipo,
entonces el valor de la variable será el valor mínimo
admitido por este tipo. unsigned short int numero = 65535;
cout << numero << endl; numero++; cout << numero << endl;
Si ejecutamos el anterior código, la segunda línea no escribirá
65536, sino 0. Esto es idéntico para todos los tipos.
Errores al definir tipos de variables
(Enteros sin signo)
Para enteros sin signo, sucede lo mismo, una vez que el tipo alcanza
su tamaño máximo, pasa a su valor mínimo. short int numero =
32767; cout << numero << endl; numero++; cout << numero << endl;
Si ejecutamos el anterior código, la segunda línea no escribirá
32768, sino -32768.