TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.
-
Upload
adan-casiano -
Category
Documents
-
view
153 -
download
2
Transcript of TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.
![Page 1: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/1.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 1 de 58
Tipos de Datos BásicosTipo de datos Descripción Requerimiento
típico de memoriaIntervalo típico
de valores
int enteros con signo 2 bytes de -32768 a 32767
char caracteres 1 byte de -128 a 127
floatnums. reales en coma
flotante de simpleprecisión
4 bytesde ~1.2E-38a ~3.4E+38
doublenums. reales en coma
flotante de dobleprecisión (más cifras
significativas yposibilidad de mayor
exponente)
8 bytes de ~2.2E-308a ~1.7E+308
![Page 2: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/2.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 2 de 58
Tipos de Datos Básicos
Tipo de datos Requerimiento típicode memoria
Intervalo típicode valores
short int 2 bytes de -32.768 a 32.767
long int 4 bytesde -2.147.483.647a +2.147.483.648
unsigned int 2 bytes de 0 a 65535
unsigned long int 4 bytes de 0 a 4.294.967.295
unsigned char 1 byte de 0 a 255
MODIFICADORES DE TIPO
![Page 3: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/3.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 3 de 58
Tipos de Datos Básicos
Tratándose de enteros, se pueden utilizar las palabras unsigned, short o long sin el identificador int, p.e.:
unsigned int unsigned etc. Se pueden mezclar caracteres y enteros en expresiones
aritméticas:int n; char c;n = 10 * n + c - ‘0’;
Todos estos tipos de datos son llamados colectivamente “tipos aritméticos”
Los tipos enteros y el tipo char se denominan “tipos integrales”.
![Page 4: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/4.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 4 de 58
Tipos de Datos Básicos
Se dispone de un operador sizeof que devuelve en bytes el tamaño del tipo de datos o expresión que se le pasa como parámetro.
Su sintaxis es: sizeof( nombre_de_tipo )sizeof expresión
Ejemplo:main(){
printf( “El tamaño de short es %d bytes\n”,
sizeof(short) );}
![Page 5: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/5.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 5 de 58
Variables
Una variable se corresponde con una cierta región de memoria que puede almacenar cualquier valor de entre un cierto conjunto de valores denominado rango.
La región de memoria que representa una variable se asocia a un identificador al que se hace referencia en el programa.
El rango de valores de una variable depende del tipo de la variable.
![Page 6: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/6.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 6 de 58
Variables: Declaración y Definición
La declaración de una variable especifica su nombre y tipo, pero no reserva necesariamente espacio de almacenamiento.
La definición de una variable especifica su nombre y tipo y reserva espacio para su almacenamiento.
Sintaxis de las variables.
tipo lista variables
clase de
almacenamiento
Todas las variables deben ser declaradas antes de que aparezcan en sentencias ejecutables.
![Page 7: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/7.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 7 de 58
Variables: Declaración y Definición
Sintaxis del tipo
modificador modificador tipo
modo de tipo base
acceso
El tipo especifica el tipo de datos de cada una de las variables de la lista subsiguiente. En caso de no especificar nada se considera que el tipo es int.
![Page 8: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/8.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 8 de 58
Variables: Declaración y Definición
La lista de variables consiste en la secuencia de los correspondientes identificadores (y opcionalmente inicializaciones) separados por comas.
identificador
variable
inicialización
variable
,
lista variables
![Page 9: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/9.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 9 de 58
Variables: Declaración y Definición
En la definición de una variable se puede especificar un valor inicial en forma de una expresión.
= expresión
inicializar variable
![Page 10: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/10.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 10 de 58
Variables: Modos de Acceso
Se definen dos modificadores de acceso para controlar la forma en que se accede a las variables
const: una variable así declarada no se puede modificar durante la ejecución del programa; únicamente puede dársele un valor inicial en su definición.
const unsigned int y = 3;
volatile: Se utiliza para indicar al compilador que el valor de una variable puede cambiar por medios no especificados explícitamente en el programa.
![Page 11: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/11.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 11 de 58
Variables: Clases de Almacenamiento
En “C” hay dos formas de caracterizar las variables:
tipo de datos y clase de almacenamiento.
El tipo de datos se refiere a la información representada por una variable.
![Page 12: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/12.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 12 de 58
Variables: Clases de Almacenamiento
La clase de almacenamiento se refiere al ámbito (reglas de alcance) y permanencia de la variable dentro del programa.
La clase de almacenamiento especifica la forma en que se deben almacenar las variables, siendo los posibles especificadores:
extern, static, auto, register
![Page 13: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/13.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 13 de 58
Variables: Reglas de Alcance
El lugar donde se declaran las variables condiciona la forma en que pueden ser utilizadas por otras partes del programa.
![Page 14: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/14.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 14 de 58
Variables: Reglas de Alcance
Existen tres partes donde se puede declarar una variable:
Fuera de todas las funciones incluida la función main(); este tipo de variable es global y se puede utilizar en cualquier parte del programa.
Dentro de las funciones; estas variables se denominan locales y sólo se pueden utilizar dentro del bloque en que se declaran.
Como parámetros formales de funciones; se utilizan para recibir argumentos cuando se invoca a una función.
![Page 15: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/15.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 15 de 58
Variables: clase de almacenamiento extern
El lenguaje permite que se enlacen distintos módulos de un programa después de haber sido compilados independientemente.
Como consecuencia de lo anterior tiene que existir alguna forma de indicar cuáles son las variables globales de un programa para que exista una sola copia de las mismas.
La solución es el especificador extern, que indica que las variables a las que acompaña se definen en algún otro lugar.
![Page 16: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/16.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 16 de 58
Variables: clase de almacenamiento extern
En lo que se refiere a las variables que se pueden compartir entre ficheros (variables externas), hay que distinguir entre una declaración que es también definición y una declaración externa.
Una variable externa es una variable global, que se define con una declaración normal que aparece fuera, y normalmente antes, de las funciones que la utilizan.
![Page 17: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/17.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 17 de 58
Variables: clase de almacenamiento extern
La definición de una variable externa es una declaración, cuyo ámbito (como declaración) se limita al fichero en que aparece, que indica al compilador que tiene que reservar espacio de almacenamiento
Debe existir una sola definición de cada variable externa entre todos los ficheros que constituyen el programa.
![Page 18: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/18.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 18 de 58
Variables: clase de almacenamiento extern
La declaración externa de una variable externa es una declaración, cuyo ámbito se limita al bloque o al fichero en que se incluye, que indica al compilador que no tiene que reservar espacio de almacenamiento.
Una declaración externa de una variable empieza con el especificador extern y su tipo tiene que coincidir con el indicado en su definición (que se encuentra en otro fichero).
Sólo se puede inicializar una variable externa en su definición:
fichero1 fichero2
int y = 0; extern int y;
se refieren a la misma variable
![Page 19: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/19.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 19 de 58
Variables: clase de almacenamiento static
Las variables de clase static tienen almacenamiento permanente pero alcance restringido.
Cuando se define como static una variable interna se genera almacenamiento permanente para ella de tal forma que mantiene su valor entre ejecuciones sucesivas del bloque en que está definida, y su ámbito se limita a este bloque.
Cuando se define como static una variable externa se genera almacenamiento permanente para ella y su ámbito se limita al fichero en que está definida.
![Page 20: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/20.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 20 de 58
Variables: clase de almacenamiento static
Si no existiesen variables locales estáticas se tendrían que utilizar variables globales, con los efectos secundarios que esto comporta.
Ejemplo
fichero1 fichero2 fichero3
static int i = 0; extern int i; int i=0;
La variable i de fichero1 no es la variable a la que se hace referencia en fichero2
La variable i de fichero2 y fichero3 sí es la misma
![Page 21: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/21.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 21 de 58
Variables: clase de almacenamiento auto
Las variables (locales) automáticas se crean cada vez que se entra en el bloque en el que han sido definidas y desaparecen cuando se sale de él
No conservan su valor de una ejecución del bloque a la siguiente, y sólo son accesibles en el interior del bloque en el que se definen.
Si en la definición de una variable local no se especifica la clase de almacenamiento, por defecto se toma por auto.
![Page 22: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/22.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 22 de 58
Variables: clase de almacenamiento register
Cuando a una variable se añade el especificador register se indica al compilador que la almacene en algún registro de la CPU.
El especificador register sólo se puede aplicar a variables automáticas, o a los parámetros formales de una función.
Cuando las variables declaradas como register no se pueden almacenar en registros de la CPU se toman por auto y se almacenan en memoria.
Dado que el acceso a variables de este tipo es muy rápido son ideales para el control de bucles
![Page 23: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/23.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 23 de 58
Variables: Generalidades
Las variables estáticas y externas se inicializan una
única vez al comienzo del programa; si no se
inicializan explícitamente se inicializan a 0.
Las variables automáticas y de clase register se
inicializan cada vez que se ejecuta el bloque donde
están definidas. Si la inicialización no es explícita, se
inicializan con valores indefinidos (basura)
![Page 24: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/24.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 24 de 58
ELEMENTOS SINTÁCTICOS BÁSICOS Constantes y Strings Las constantes son valores fijos que no pueden alterarse
durante la ejecución del programa.
Las constantes de tipo numérico deben cumplir las normas siguientes:– no pueden incluir comas ni espacios en blanco,– pueden ir precedidas del signo ( - ),– no pueden exceder de un límite máximo y mínimo especificado.
Las constantes enteras pueden escribirse en decimal, en octal (comienzan por 0) y en hexadecimal (comienzan por 0x o 0X)
![Page 25: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/25.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 25 de 58
ELEMENTOS SINTÁCTICOS BÁSICOS: Constantes y Strings
Una constante entera sin signo se identifica añadiéndole la
letra U o u al final.
Una constante entera larga se identifica añadiéndole la letra L
o l al final.
Una constante real es un número en base 10 que contiene un
punto decimal y/o un exponente entero (separado de la
mantisa con una E o una e) y opcionalmente un signo. Se
considera de doble precisión si no termina por la letra F o f
![Page 26: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/26.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 26 de 58
ELEMENTOS SINTÁCTICOS BÁSICOS: Constantes y Strings
Una constante carácter se escribe como un solo carácter encerrado entre comillas simples.
Una constante cadena de caracteres se escribe como una secuencia de cualquier número de caracteres consecutivos, encerrada entre comillas dobles.
![Page 27: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/27.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 27 de 58
Operadores Aritméticos: Aditivos
Los operadores aritméticos aditivos:+ (suma) - (resta)
son binarios, por lo que requieren dos operandos.
Los operandos pueden ser expresiones de cualquier tipo de datos básico:char int short long unsigned float double
También puede tener sentido sumar o restar una expresión de cualquier tipo integral (char, int, short, long, unsigned) a un puntero a un elemento de un array (un uso de la llamada “aritmética de punteros”)
![Page 28: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/28.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 28 de 58
Operadores Aritméticos: Multiplicativos
Los operadores aritméticos multiplicativos (siempre
binarios) son los siguientes:
* (producto) / (cociente) % (resto de división entera)
Los operadores * y / pueden trabajar sobre expresiones de
cualquier tipo de datos básico.
![Page 29: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/29.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 29 de 58
Operadores Aritméticos: Multiplicativos
Cuando / se aplica a dos operandos integrales se trunca la parte fraccionaria del resultado.
Ejemplo: 7/2 = 3; 7./3 = 2.33….
Los operandos de % deben ser expresiones de tipo integral (el segundo, no nulo). En general el resultado siempre lleva el signo del numerador.
Ejemplos: 7%3 = 1; (-7)%3 = -1;
7%(-3) = 1; (-7)%(-3) = -1
![Page 30: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/30.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 30 de 58
Operadores Aritméticos:Cambio de Signo
Los únicos operadores aritméticos unarios (que requieren
un solo operando) son - y + (el segundo fue nuevo en el
estándar ANSI). El - produce el cambio de signo del
operando.
El operando puede ser una expresión de cualquier tipo de
datos básico.
![Page 31: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/31.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 31 de 58
Operadores Relacionales
Existen 4 operadores relacionales, todos ellos binarios:Operador Significado < menor que <= menor o igual que > mayor que >= mayor o igual que
Se pueden aplicar a expresiones de cualquier tipo de datos básico.
![Page 32: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/32.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 32 de 58
Operadores Relacionales
El resultado de estos operadores es 0 cuando la
relación especificada es falsa y 1 cuando es cierta (el
tipo del resultado es int, en “C” no hay booleano).
También es posible comparar punteros, dependiendo el
resultado de la posición relativa de los objetos
apuntados en el espacio de direcciones del programa.
![Page 33: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/33.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 33 de 58
Operadores Relacionales y Lógicos
Los operadores de igualdad también son binarios:Operador Significado == igual que != distinto de
Los operadores lógicos son binarios; también se llaman conectivas lógicas:
Operador Significado && y lógica || o lógica
![Page 34: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/34.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 34 de 58
Operadores Relacionales y Lógicos
Los operandos no tienen por qué ser del mismo tipo, y
pueden ser expresiones de cualquier tipo de datos básico.
El único operador lógico unario es la negación lógica !.
Devuelve 1 si el operando es 0 y 0 si el operando es
distinto de 0.
![Page 35: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/35.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 35 de 58
Operadores de Manejo de Bits
Como el lenguaje también fue diseñado para sustituir al lenguaje ensamblador en la mayoría de las tareas de programación, dispone de operadores especiales para manejar bits, siendo éstos:
Operador Significado Operador Significado & and bit a bit | or bit a bit
^ xor bit a bit << despl. a la izda. >> desp. a la drcha. ~ complemento a 1
Se pueden aplicar a cualquier operando de tipo integral
![Page 36: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/36.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 36 de 58
Operadores de Manejo de Bits
Los operadores de desplazamiento de bits desplazan los bits del operando izquierdo tantas posiciones como indique el operando derecho.
n << 2
Cuando el desplazamiento es hacia la izquierda se añaden 0`s por la derecha y, en general, viceversa.
![Page 37: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/37.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 37 de 58
Operadores de Manejo de Bits: Advertencia
Dado que la precedencia de los operadores de manejo de bits es menor que la de los operadores de igualdad, las expresiones de comprobación de bits deben encerrarse entre paréntesis:
x & mascara == 0 <#> (x & mascara) == 0
![Page 38: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/38.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 38 de 58
Operadores y Expresiones de Asignación
Los operadores de asignación son todos binarios y son:= += -= *= /= %= aritméticos>>= <<= &= ^= |= manejo de bits
El valor del operando derecho se convierte al tipo del operando izquierdo.
Los operadores de asignación requieren que el operando izquierdo sea una referencia a una zona de almacenamiento (un lvalue) y no una expresión cualquiera.
Expresiones de asignación del tipo e1 op= e2 son abreviaturas: e1 op= e2 e1 = e1 op ( e2 )
![Page 39: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/39.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 39 de 58
Operadores de Incremento y Decremento
El lenguaje dispone de dos operadores unarios para incrementar y decrementar variables de cualquier tipo de datos básico y punteros:
Operador Significado ++ incremento -- decremento
Estos operadores incrementan o decrementan en una la variable a la que están asociados.
Se pueden aplicar como prefijo o como sufijo:++n --nn prefijos (incrementan antes de usar)n++ n-- sufijos (incrementan después de usar)
![Page 40: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/40.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 40 de 58
Expresiones Condicionales El lenguaje dispone de un operador condicional ( ?: )
para evaluar alternativas. Su sintaxis es:expresión1 ? expresión2 : expresión3
Se evalúa expresión1 y si es distinta de 0 (true) el resultado de la expresión condicional es expresión2. Si el resultado de expresión1 es 0 (false) el resultado es expresión3.
Suelen aparecer en la parte derecha de una sentencia de asignación simple. Se asigna al identificador de la izquierda el valor de la expresión condicional.
min = ( f < g ) ? f : g;
![Page 41: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/41.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 41 de 58
Precedencia de operadores
Precedencia Asociatividad
( ) [ ] -> . I-D
- ! ++ -- (tipo) & sizeof * D-I
* / % I-D
+ - I-D
<< >> I-D
< <= > >= I-D
== != I-D
& (and a nivel de bits) I-D
![Page 42: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/42.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 42 de 58
Precedencia de operadores
Precedencia Asociatividad
^ (or exclusiva a nivel de bits) I-D
| (or a nivel de bits) I-D
&& I-D
|| I-D
? : (operador condicional) D-I
= += -= *= /= %=>>= <<= &= ^= |=
D-I
, I-D
![Page 43: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/43.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 43 de 58
Precedencia de operadores
Los operadores situados en la misma fila tienen la
misma precedencia.
Las filas están ordenadas de mayor a menor
precedencia.
A igualdad de precedencia los operadores se
agrupan de acuerdo a su asociatividad.
![Page 44: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/44.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 44 de 58
Conversiones de tipos
Cuando se mezclan operandos de diferentes tipos se produce una conversión. Las reglas son:
En cualquier operación en que se mezclan operandos de diferentes tipos se produce una conversión del tipo inferior al tipo superior antes de efectuarse la operación, siendo este último el tipo del resultado.
El rango o categoría de tipos de mayor a menor es:double, float , long, int, short, char
En una sentencia de asignación, el resultado final de los cálculos se reconvierte al tipo de la variable a la que van a ser asignados.
![Page 45: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/45.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 45 de 58
Conversiones de Tipos:Operador de Moldeado
El operador de moldeado (o cast) sirve para forzar conversiones explícitas del tipo de una expresión.
Su sintaxis es: ( tipo de datos ) expresión .
El resultado de la expresión se convierte al tipo de datos especificado entre paréntesis.
Tiene la misma precedencia que el resto de los operadores unarios.
![Page 46: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/46.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 46 de 58
Conversiones de tipos: Advertencias
Una asignación que implica una conversión de tipos
conlleva una promoción o pérdida de rango del valor
asignado, según el tipo de la variable a la que se asigna.
La promoción suele ser inocua, suele pasar inadvertida.
La pérdida de rango puede provocar auténticas catástrofes
![Page 47: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/47.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 47 de 58
Conversión de Tipos:Parámetros de Funciones
Como los parámetros actuales en las llamadas a funciones también son expresiones, se les pueden aplicar las reglas de conversión de tipos.
En ANSI C, los parámetros formales de las funciones se pueden declarar mediante un prototipo de la función, y por tanto se realizan comprobación de tipos y conversiones entre parámetros formales y actuales; ejemplo:
int nombre_funcion (int para1, char para2)
![Page 48: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/48.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 48 de 58
Conversión de tipos
Para Obtener Desde Observaciones
char unsigned char Si el valor > 127, el resultado es negativo
char short int Se pierden los 8 bits más significativos
char int Se pierden los 8 bits más significativos
char long int Se pierden los 24 bits más significativos
short int long int Se pierden los 16 bits más significativos
int float Se pierde la parte fraccionaria (resultado indefinido si el valor no se ajusta al rango
de int)
float double Se redondea o se trunca, dependiendo de la implementación, según la precisión del
resultado (resultado indefinido si el valor no se ajusta al rango de float)
Nota: Para esta tabla se ha considerado una anchura de palabra de 16 bits.
![Page 49: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/49.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 49 de 58
Conversiones de Tipos:Enteros Sin Signo
Para Obtener Desde Valor Resultado
unsigned short positivo no cambia
unsigned short negativo depende de la representación
int unsigned dentro del rango del int no cambia
int unsigned fuera del rango depende de la representación
long unsigned dentro del rango no cambia
long unsigned fuera del rango depende de la representación
unsigned long positivo no cambia
unsigned long negativo depende de la representación
![Page 50: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/50.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 50 de 58
Precedencia y Orden de Evaluación
En la mayoría de los lenguajes no se especifica el orden de evaluación de los operandos de los operadores.
El resultado de evaluar una expresión que incluye operadores de asignación y de incremento o decremento puede depender del orden de evaluación de las operaciones implicadas.
En “C” no se especifica el orden de evaluación de los parámetros de las funciones.
![Page 51: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/51.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 51 de 58
Precedencia y Orden de Evaluación: Advertencias
Cuidado con los efectos laterales producidos por las expresiones
de asignación y los operadores de incremento y/o decremento.
Cuidado con la escritura de programas cuyos resultados dependen
del orden de evaluación de los operandos. Los resultados
intermedios deben guardarse en variables temporales.
![Page 52: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/52.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 52 de 58
Tipos Enumerados
Es posible declarar una lista de constantes enteras con un nombre asociado mediante la declaración de tipos enumerados.
El tipo enumerado es una lista de símbolos cuya sintaxis es
enum etiqueta { lista_id_ctes } lista_variables;
La etiqueta especifica el nombre del tipo y es opcional.
En las variables de un tipo enumerado sólo se deben almacenar constantes especificadas para ese tipo (pero el estándar no obliga al compilador que lo compruebe).
![Page 53: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/53.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 53 de 58
Tipos Enumerados
La etiqueta se puede usar para declarar variables de ese
tipo en otros puntos del programa.
No se debe olvidar que cada símbolo de lista_id_ctes
representa internamente un valor entero y por tanto puede
utilizarse en cualquier expresión entera.
![Page 54: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/54.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 54 de 58
Tipos Enumerados:operaciones válidas
Se puede asignar una constante de un tipo enumerado a una variable del mismo tipo:
enum felinos { gato = 15, tigre, leon, puma};enum felinos mascota;mascota = gato;
Se pueden utilizar los operadores de igualdad:if (mascota == gato) .....if (mascota != leon) .....
Se pueden utilizar operadores aritméticos con constantes de un tipo enumerado.
![Page 55: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/55.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 55 de 58
Tipos Enumeradosoperaciones que no conviene realizar
No conviene utilizar los operadores de asignación (excepto =). mascota += gato /* advertencia */
No conviene utilizar los operadores de relación. if (mascota > puma) .... /* advertencia */
No conviene utilizar los operadores aritméticos. mascota = mascota + gato; /* advertencia */
Normalmente no conviene utilizar una constante de un tipo enumerado como subíndice de un array. fichas[rojo] = 23; /* desaconsejado */
![Page 56: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/56.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 56 de 58
Tipos Enumerados:Utilización
Contribuyen a la legibilidad de los programas
Se utilizan normalmente para uso interno de los programas y no en E/S.
![Page 57: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/57.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 57 de 58
Definición de Tipos
Cuando a una declaración de variables precede la palabra
typedef, los identificadores especificados no se refieren a
variables, sino a nombres de tipos de datos.
Estos nombres de tipos pueden usarse posteriormente en la
declaración de variables o en conversiones de tipos.
Su sintaxis es:
typedef tipo lista_nombre;
![Page 58: TIPOS DE DATOS Y OPERADORESL.P.S.I.Pág. 1 de 58 Tipos de Datos Básicos.](https://reader033.fdocuments.co/reader033/viewer/2022061604/5528bde5497959977d8fca5e/html5/thumbnails/58.jpg)
TIPOS DE DATOS Y OPERADORES L.P.S.I. Pág. 58 de 58
Definición de Tipos
El alcance de la definición depende de la localización de la
sentencia typedef. Si se realiza dentro de una función, el
alcance queda confinado a la misma. Si la definición es
externa (a toda función) el alcance es global.
Este proceso ayuda a que los programas sean menos
dependientes de la máquina y por tanto más transportables.