UNIDAD 2
UNIDAD 2
UNIDAD 2
Tipos
Primitivos Compuestos
Arreglos
Enteros
“short” y “long”: Modifica el tamaño en bits del entero. Existen por tanto tres tipos
de enteros: “int”, “short int” (que se puede abreviar como “short”), y “long
int” (que se puede abreviar como “long”).
o El lenguaje C no define tamaños fijos para sus tipos de datos básicos. Lo
único que garantiza es que un short int tiene un tamaño menor o igual que
un int y este a su vez un tamaño menor o igual a un long int. Esta
característica del lenguaje ha complicado la creación de programas que sean
compatibles entre varias plataformas.
“unsigned”: define un número natural (mayor o igual a cero).
Rebalse de Enteros
Sea la declaración
num = 131;
Es de pensar que el resultado mostrado en pantalla sería 131, sin embargo en la pantalla
aparecerá el valor -125, pues se produce un rebalse de enteros.
Al definir la variable num del tipo short int, el formato es de 8 bits con signo, es decir un bit
para el signo y quedan 7 para el número, 27 que sería 128 valores negativos (con el bit 1
por delante, desde el -128 hasta el -1) y 128 valores positivos (con el bit 0 por delante,
desde 0 hasta el 127), pero como el número 131, excede en 4 unidades al máximo valor
positivo que es 127, los cuatro valores restantes que hacen la diferencia, serán recorridos
desde el valor más pequeño hacia adelante, es decir, -128, -127, -126, -125. Siendo este el
resultado final. De manera similar ocurre con un valor muy pequeño, lenguaje C tomaría la
diferencia desde los valores más altos. Esto ocurre para todos los tipos de enteros.
Caracteres
Las variables de tipo letra se declaran como “char”. Para referirse a una letra se rodea de
comillas simples: 'M'. Las letras, o cualquier símbolo del teclado, se representan
internamente como números, para tal fin, lenguaje C asigna un espacio de 8 bits, lo que
produce un rango de 28 posibles valores, es decir 256 caracteres.
Para esta representación, el computador usa un valor numérico para cada símbolo del
teclado (letras, dígitos, espacios, caracteres especiales, signos de puntuación, etc.). Para
estandarizar esto a nivel mundial, y poder ser utilizado sin inconvenientes en cualquier
sistema se crean tablas estándar donde está el valor numérico asignado a cada tecla
(llamado ordinal) y su símbolo correspondiente. Tal tabla es llamada ASCII, siendo
complementada en la actualidad por una versión más moderna llamada UNICODE. Algunas
de las representaciones son las siguientes.
Flotantes
Se utilizan para representar números reales, es decir cantidades numéricas con parte
decimal, tanto positivas como negativas, útil en la representación de pesos, distancias,
unidades monetarias, entre otros.
Los números reales se definen con “float” o “double”. La diferencia entre ambas es la
precisión que ofrece su representación interna. Hay un número infinito de reales, pero se
representan con un número finito de bits. A mayor número de bits, mayor número de
reales se representan, y por tanto, mayor precisión. Los reales definidos
con “double” tienen un tamaño doble a los definidos con “float”. Al igual que en el caso de
los enteros, el tamaño de estas representaciones varía de una plataforma a otra.
Overflow/underflow
Este evento ocurre cuando tratamos de almacenar un valor superior a la capacidad en bits
que se tiene para ese tipo de datos, similar al rebalse de enteros, pero en este caso con
números flotantes o reales. Cuando se excede el valor máximo, la variable tomará el valor
máximo, sin pasar de allí. Cuando se trata de almacenar un dato inferior al valor mínimo, se
tomará el valor cero.
Cadenas
Una cadena es un conjunto de variables de caracteres que forman una unidad, también es
conocido por su nombre en inglés string. Se obtiene definiendo la variable de tipo char y
colocando luego del nombre del identificador, el número de caracteres que posee
encerrado en corchetes. Ejemplo
Char Cadena[10]; permite definir una variable donde se pueden almacenar hasta 10
caracteres.
Operadores
Los operadores son los símbolos que permiten hacer transformaciones y operaciones con
los datos. Lenguaje C maneja 3 tipos de operadores básicos.
Aritméticos
Relacionales
Lógicos
El tipo de operador está ligado al tipo de resultado que se puede obtener y al orden o
prioridad en que se realizan las operaciones.
Operadores Aritméticos
Las operaciones de multiplicación y división tienen igual prioridad, y se realizan antes que
las operaciones de suma y resta. Si se combinan dos operaciones de igual prioridad, se
comienza a resolver de izquierda a derecha. La única forma de alterar esa prioridad, es el
uso de paréntesis, en cuyo caso se resuelve primero el más interno, se continúa con
multiplicaciones y divisiones y finalmente sumas y restas. No se usan corchetes ni llaves
como signos de agrupación.
Prioridades
()
*, /
+, -
Operador Módulo
Por ser una división, tiene la misma prioridad que * y /, y no trabaja con flotantes. De esta
forma las prioridades quedan así:
Prioridades
()
*, /,%
+, -
Operadores Relacionales
Permiten establecer la relación entre 2 valores para obtener un resultado cierto o falso. La
relación de comparación de 2 valores tiene seis posibles combinaciones, a continuación se
presenta cada una, y su notación tanto matemática como en lenguaje C.
Relación Notación
Matemática Lenguaje C
Mayor que > >
Mayor o igual que ≥ >=
Menor que < <
Menor o igual que ≤ <=
Igual = ==
diferente ≠ !=
Prioridades
()
*, /,%
+, -
>,>=,<, <=
== y !=
Operadores Lógicos
Trabajan con operandos (datos) verdaderos o falsos y sus resultados son verdaderos o
falsos. Sus operaciones fueron definidas por Jhon Boole, por eso también son llamados
booleanos. El algebra de boole contempla varias operaciones, manejaremos aquí las más
difundidas:
Operador Or
Operador And
El operador And, representado por “&&” equivale a “Y”; devuelve true sólo si los dos
operandos son true o lo que es equivalente, distintas de cero. En cualquier otro caso el
resultado es false.
Operador Not
El operador Not, posee una prioridad muy alta, luego de los paréntesis, mientras que el
And y el Ord, en ese mismo orden, se resuelven después de los operadores
relacionales. Así quedaría la tabla
Prioridades
()
!
*, /,%
+, -
>,>=,<, <=
== y !=
&&
||
Lenguaje C puede manejar los operadores lógicos como numéricos y los numéricos como
lógicos, dependiendo del contexto de la expresión. Ejemplo.
Int X = 5, Y = 0,Z;
Otros operadores
Operadores de Asignación
Permiten colocar una expresión en forma abreviada, con única la intención de escribir
menos código. Se aplica cuando tenemos una expresión de la forma:
Variable Operador = Expresión (Forma implícita), de esta manera se ahorra escribir una
vez el nombre de la variable. Ejemplo:
Es importante tomar en cuenta que cuando tenemos una expresión abreviada (forma
implícita) y la queremos expandir (forma explícita), el operador afecta a todo el lado
derecho de la expresión, por lo que se recomienda el uso de paréntesis. Ejemplo
Prioridades
()
!
*, /,%
+, -
>,>=,<, <=
== y !=
&&
||
+=, -=, *=, /=, %=
=
En la línea a) encontramos tres formas de sumar uno a la variable Cont, en la línea b), tres
formas de restar uno variable Num.
Encontramos acá un elemento que es muy importante, que es el modo, aunque no afecta
la operación de cálculo, incide significativamente en el orden de prioridad lo que puede
afectar el resultado final.
El modo está asociado a la ubicación del símbolo ++ ó --, delante o detrás de la variable.
Modo Prefijo: ++Variable ó - - Variable. Se modifica primero la variable (bien sea sumar o
restar uno) y luego se utiliza este resultado para resolver la expresión.
Esto trae como consecuencia que el modo prefijo tiene una muy alta prioridad (junto con el
operador !) y el modo postfijo la más baja prioridad (después de asignar =)
#include <stdio.h>
#include <iostream.h>
void main()
{
int a, b;
a = 25;
b = a++/2;
cout << “a = ”<< a <<” b = ” b ;
}
()
!, ++,-- prefijo
*, /,%
+, -
>,>=,<, <=
== y !=
&&
||
+=, -=, *=, /=, %=
=
++, -- postfijo