Programación I :: Prof. Yeniffer Peña Conceptos Avanzados de Programación Presentación.

Slides:



Advertisements
Presentaciones similares
Curso de java básico (scjp)
Advertisements

DATSI, FI, UPM José M. Peña Programación en C DATSI, FI, UPM José M. Peña Programación en C.
Repaso para la construcción del intérprete 2012
Programación, Algoritmos y Estructuras de Datos
Estructuras de datos. Programación, Algoritmos y Estructuras de Datos.
Variables Prof. Gonzalo Pastor.
Punteros Universidad Nacional Mayor de San Marcos
Introducción al Lenguaje C (ANSI)
UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO
Objetos de un programa Datos: Se denomina dato a toda aquella información característica de una entidad y que es susceptible de tratamiento en un programa.
Roberto Mercado Holguin
Unidad 3 Punteros.
¿Qué es un PUNTERO?: Un puntero es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable. No.
Tipos de Datos Básicos 1.
Diseño de algoritmos “Punteros”
Tema 9 Estructuras.
Características de “C”
JAVA J.A.C..
Unidad III Elementos del lenguaje C++
Tema 2: Los tipos de datos
Estructuras.
TABLAS Definición. El tipo tabla permite definir objetos formados por un conjunto de elementos del mismo tipo. Ejemplos. El tipo tabla se utiliza para.
Informática Ingeniería en Electrónica y Automática Industrial
ATC-DistribuidasUniversidad de Oviedo / Dpto. de Informática XDR (External Data Representation) Tipos y codificación.
Programa Vespertino de Automatización Equipos y Sistemas de Control Digital Lenguaje C Profesor: Felipe Páez Mejías D e p a r t a m e n t o d e I n g e.
Unidad VI Registros (estructuras, uniones y enumeraciones)
Tipo de Datos Básicos.
© AutoresV1.1 Informática Ingeniería en Electrónica y Automática Industrial Datos en lenguaje C.
El lenguaje de programación C - Identificadores y variables – Isidro González Caballero ( Introducción.
Programación en Lenguaje C
Tema 3: Operadores Antonio J. Sierra. Índice Aritméticos A nivel de bit Relacionales Lógicos Asignación.
Estructuras de Datos Introducción. Proceso (Programa ) Datos de Entrada Datos de salida El proceso computacional.
Programación orientada a objetos. El método main es el comportamiento por el cual comienzan todos los programas en Java, de la misma forma en la que C,
 En computación es un conjunto de líneas de señal que el microprocesador o CPU utilizan para intercambiar datos con otros componentes como teclados,
PUNTEROS Y REFERENCIAS
Elementos del lenguaje C++
FUNDAMENTOS DE PROGRAMACIÓN
Estructura de un programa C
CARACTERÍSTICAS Es un lenguaje de programación estructurado de propósito general. Está estrechamente asociado al sistema operativo UNIX, ya que el propio.
Registros Departamento de Computación
PRINCIPIOS DE PROGRAMACIÓN

Fundamentos de Programación
 Todas las operaciones que se producen en el teclado y la pantalla de la computadora.  A continuación algunas funciones básicas de entrada y salida.
PARCIAL III Tipo de datos estructurados. DATO Información en volumen, sin ningún significado Dado un enunciado, evento o acción, los datos Permiten representar.
CONSTANTES DENTRO DE UN CÁLCULO O EN LOS PASOS PARA SOLUCIONAR UN PROBLEMA, EXISTIRÁN VALORES QUE NUNCA VAN A CAMBIAR Y SE LOS CONOCE COMO CONSTANTES.
Paso de Parámetros a una Función Prof. Flor Narciso Departamento de Computación Escuela de Ingeniería de Sistemas Facultad de Ingeniería Universidad de.
Informática Ingeniería en Electrónica y Automática Industrial
Características de “C” Esta conformado por un Ambiente Integrado. Es un Lenguaje de Nivel medio.Es un compilador. Contiene un conjunto de palabras reservadas.
Arquitecturas de Computadoras Aritmética Computacional
1 Arquitecturas de Computadoras Breve repaso al algebra booleana.
1 Estructuras de Datos Introducción a la Informática Departamento de Sistemas Universidad del Cauca 2006.
Computación I :: Prof. Yeniffer Peña Lenguaje C Presentación Computación I.
Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Representación de la Información en el Computador Material Recopilado por el Prof. Manuel Sánchez.
FUNDAMENTOS DE PROGRAMACIÓN VARIABLES, CONSTANTES Y TIPOS DE DATOS EN C.
LÓGICA DE PROGRAMACIÓN UNIDAD III. INTRODUCCIÓN AL LENGUAJE C.
Programación SISTEMAS NUMERICOS PROGRAMACION I INFO 012.
Computación I :: Prof. Yeniffer Peña Introducción al C Presentación Computación I.
This y static. This Normalmente, dentro del cuerpo de un método de un objeto se puede referir directamente a las variables miembros del objeto. Sin embargo,
Introducción al Lenguaje C (II) Cadenas de caracteres, archivos de cabecera, lectura y escritura Fundamentos de Programación Departamento de Lenguajes.
3.6 Manejo de E/S Estructuras En la creación de soluciones para algunos problemas surge la necesidad de agrupar datos de diferente tipo o de manejar datos.
Computación I :: Prof. Yeniffer Peña Lenguaje C Presentación Computación I.
Sistemas Basados en Microprocesador Curso 2012/2013 Departamento de Tecnología E l e c t r ó n i c a Modelo del Programador de un Sistema digital basado.
Computación I :: Prof. Yeniffer Peña Introducción al C Presentación Computación I.
Curso: Arquitectura de Computadoras Sesión 05 Noelia Paola Saavedra Nizama.
Funciones y paso de parámetros Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Unidad Didáctica 24.
Programación utilizando operadores a nivel de bits Unidad III – Conceptos Avanzados de Programación Programación I
Programación I MC José Andrés Vázquez Flores
Tema 3: Operadores Antonio J. Sierra.
Transcripción de la presentación:

Programación I :: Prof. Yeniffer Peña Conceptos Avanzados de Programación Presentación

Programación I Operadores a nivel de bits. Enmascaramiento. Campos de bits. Unidad I: Conceptos Avanzados de Programación OPERACIONES Y MANEJO DE BITS

Programación I Las computadoras representan todos los datos internamente como secuencia de bits. Una secuencia de 8 bits forman un byte que es la unidad estándar de almacenamiento. C puede manejar a nivel de bits (char, short, int y long). No manipula los punto flotantes. Operaciones y Manejo de Bits Operadores a Nivel de Bits:

Programación I Las operaciones a nivel de bits se refieren a la comprobación, asignación o desplazamiento de los bits reales que componen un byte o una palabra de memoria, que corresponden a los tipos estándar de C char, short, int y long. Los enteros no signados (unsigned) son utilizados normalmente con los operadores a nivel de bits. Las manipulaciones a nivel de bits son dependientes de la máquina. Operaciones y Manejo de Bits Operadores a Nivel de Bits:

Programación I Operadores Lógicos AND (&) OR inclusivo (|) OR exclusivo (^) Complemento (~) Operadores de Desplazamiento Desplazamiento izquierda (<<) Desplazamiento derecha (>>) Operadores a Nivel de Bits: Operaciones y Manejo de Bits

Programación I Operaciones y Manejo de Bits Operadores Lógicos a Nivel de Bits: OperadorUsoOperación &Operando & Operando Realiza una operación AND lógico entre los dos operandos |Operando | Operando Realiza una operación OR lógica entre los dos operandos ^Operando ^ Operando Realiza una operación lógica OR Exclusiva entre los dos operandos ~~Operando Complementario del operando (unario)

Programación I AND (&) Los bits se establecen a 1 si los bits en ambos operandos son 1. OR inclusivo (|) Los bits se establecen a 1 si por lo menos uno de los bits correspondientes en los dos operandos es 1. OR exclusivo (^) Los bits se establecen a 1 si solo uno de los bits correspondientes en los dos operandos es 1. Complemento (~) Todos los bits 0 se definen a 1 y todos los 1 se definen a 0. Operaciones y Manejo de Bits Operadores Lógicos a Nivel de Bits:

Programación I Operadores Lógicos a Nivel de Bits: Operaciones y Manejo de Bits COMPLEMENTO AND OROR EXCLUSIVO

Programación I AND (&) Los bits se establecen a 1 si los bits en ambos operandos son 1. void main (){ char letra1, letra26, res; letra1 = ‘A’; /* 65 */ letra26 = ‘Z’; /* 90 */ res = letra1 & letra26; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra1 letra letra1 & letra26 M E M O R I A P A N T A L L A y Entero= 64

Programación I OR inclusivo (|) Los bits se establecen a 1 si por lo menos uno de los bits correspondientes en los dos operandos es 1. void main (){ char letra1, letra26, res; letra1 = ‘A’; letra26 = ‘Z’; res = letra1 | letra26; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra1 letra letra1 | letra26 M E M O R I A P A N T A L L A Caracter= [ y Entero= 91

Programación I OR exclusivo (^) Los bits se establecen a 1 si solo uno de los bits correspondientes en los dos operandos es 1. void main (){ char letra1, letra26, res; letra1 = ‘A’; letra26 = ‘Z’; res = letra1 ^ letra26; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra1 letra letra1 ^ letra26 M E M O R I A P A N T A L L A Caracter= ← y Entero= 27

Programación I Complemento (~) Todos los bits 0 se definen a 1 y todos los 1 se definen a 0. void main (){ char letra, res; letra = ‘Z’; res = ~ letra; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra ~letra M E M O R I A P A N T A L L A Caracter= Ñ y Entero= -91 En realidad el resultado es 165(Ñ), pero como la capacidad de almacenamiento de 8 bits es =255 con rango [-128,127] entonces calcula =38 y luego =-91

Programación I Para que esto no suceda se puede obviar el rango negativo, de la siguiente manera: void main (){ unsigned char letra, res; letra = ‘Z’; res = ~ letra; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra ~letra M E M O R I A P A N T A L L A Caracter= Ñ y Entero= 165

Programación I Operaciones y Manejo de Bits Operadores de Desplazamiento a Nivel de Bits: OperadorUsoOperación >> Operando >> Despl Desplaza bits del Operando hacia la derecha las posiciones indicadas por Despl (con signo) y rellena con cero a la izquierda. <<Operando << Despl Desplaza bits del Operando hacia la izquierda las posiciones indicadas por Despl (con signo) y rellena con cero a la derecha.

Programación I Desplazamiento (>>) Desplaza bits del Operando hacia la derecha las posiciones indicadas por Despl (con signo) y rellena con 0 a la izquierda. void main (){ char letra, res; letra = ‘Z’; res = letra >>3; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra letra >> 3 M E M O R I A P A N T A L L A Caracter= ♂ y Entero= 11 bits perdidos bits de relleno

Programación I Desplazamiento (<<) Desplaza bits del Operando hacia la izquierda las posiciones indicadas por Despl (con signo) y rellena con 0 a la derecha. void main (){ char letra, res; letra = ‘Z’; res = letra <<3; printf(“Caracter= %c y Entero= %d”,res, res); getch(); } Operaciones y Manejo de Bits Ejemplo de Operadores a Nivel de Bits: letra letra << 3 M E M O R I A P A N T A L L A Caracter= ð y Entero= 208 bits perdidos bits de relleno

Programación I En las operaciones con desplazamiento de bits descritas, se toma en cuenta el signo, por ejemplo: Desplazamiento a la Derecha: 128 >> 1  retorna 128 / 2 1 = >> 4  retorna 256 / 2 4 = >> 4  retorna -256 / 2 4 = -16 Desplazamiento a la Izquierda: 128 << 1  retorna 128 * 2 1 = << 2  retorna 16 * 2 2 = << 2  retorna -16 *2 2 = -64 Operaciones y Manejo de Bits Operadores de Desplazamiento a Nivel de Bits:

Programación I El enmascaramiento se utiliza para ocultar información, esto se hace mediante máscaras que se encargan de esconder (disfrazar) algunos bits en un valor, mientras otros bits se seleccionan. El enmascaramiento se logra con los operadores lógicos &, | y ^. Para cada operador el tipo de enmascaramiento funciona de un modo distinto. Operaciones y Manejo de Bits Enmascaramiento:

Programación I Supongamos que en un dato entero corto (por ejemplo, el código de un empleado) fue codificada información de tal manera que los bits 4 y 5 representan el estado civil, con las siguientes combinaciones: Bits 4 y 5 son 2 bits y cada bit tiene 2 posibles valores 0/1. Entonces, hay 2 #bits combinaciones. Esto es, 2 2 = 4 combinaciones. Operaciones y Manejo de Bits Enmascaramiento: =67 soltero > 0 =4115 casado -> 16 =544 divorciado -> viudo >

Programación I Operaciones y Manejo de Bits void main (){ short int codigo=64, mascara, op; /* */ printf(“1. Soltero\n”); printf(“2. Casado\n”); printf(“3. Divorciado\n”); printf(“4. Viudo\n”); printf(“Opcion: ”); scanf(“%d”,&op); switch(op){ case 1: { mascara=0; break;} case 2: { mascara=16; break;} case 3: { mascara=32; break;} case 4: { mascara=48; break;} } codigo=codigo | mascara; printf(“Su codigo es: %d\n”, codigo); getch(); } codigo mascara codigo|mascara M E M O R I A P A N T A L L A Codificación de información:

Programación I Copia los bits indicados del patrón original y el resto de bits los anula ó hace cero. La máscara debe tener 1 en el bit que se desea copiar y 0 si el bit se desea anular. Operaciones y Manejo de Bits Enmascaramiento con Operador &:

Programación I Operaciones y Manejo de Bits Enmascaramiento con Operador &: void main (){ short int codigo, mascara, res; codigo = 80; /* */ mascara = 48; /* */ res = codigo & mascara; printf(“Resultado = %d\n”, res); getch(); } codigo mascara codigo&mascara M E M O R I A P A N T A L L A Resultado = 16 switch(res){ case 0: printf(“Es soltero\n”); break; case 16: printf(“Es casado\n”); break; case 32: printf(“Es divorciado\n”); break; case 48: printf(“Es viudo\n”); break; } Es casado

Programación I Copia los bits indicados del patrón original y el resto de bits los hace uno. La máscara debe tener 0 en el bit que se desea copiar y 1 si el bit se desea hacer 1. Operaciones y Manejo de Bits Enmascaramiento con Operador | (ó inclusiva): void main (){ short int codigo, mascara, res; codigo = 83; mascara = 48 /* */ res = codigo | mascara; printf(“Resultado = %d”, res); getch(); } codigo mascara codigo|mascara M E M O R I A P A N T A L L A Resultado = 223

Programación I Copia los bits indicados del patrón original y el resto de bits los invierte. La máscara debe tener 0 en el bit que se desea copiar y 1 si el bit se desea invertir. Operaciones y Manejo de Bits Enmascaramiento con Operador ^ (ó exclusiva): void main (){ short int codigo, mascara, res; codigo = 83; mascara = 48 /* */ res = codigo ^ mascara; printf(“Resultado = %d”, res); getch(); } codigo mascara codigo^mascara M E M O R I A P A N T A L L A Resultado = 156

Programación I Operaciones y Manejo de Bits Programa para visualizar bits #include void mostrarBits(unsigned); int main() { unsigned x; printf("Introduzca un entero sin signo: "); scanf("%u", &x); mostrarBits(x); return 0; } void mostrarBits (unsigned valor) { unsigned c, mascara = 1<<31; printf("%7u = ", valor); for (c=1;c<=32;c++) { putchar(valor & mascara ? '1': '0'); valor <<=1; if (c% 8 ==0) putchar(' '); } putchar('\n'); }

Programación I Cada operador a nivel de bits (a excepción del operador de complemento) tiene un operador de asignación correspondiente: Operaciones y Manejo de Bits Operadores a Nivel de Bits: &= |= ^= <<= >>= Operador de asignación AND a nivel de bits Operador de asignación OR inclusivo a nivel de bits Operador de asignación OR exclusivo a nivel de bits Operador de asignación de desplazamiento a la izquierda Operador de asignación de desplazamiento a la derecha

Programación I C proporciona la capacidad de especificar o definir el número de bits en el cual se almacena un miembro unsigned o int de una estructura o de una unión. Los miembros de campos de bits deben ser declarados como int o unsigned. Operaciones y Manejo de Bits Campos de Bits: struct CamposBits { unsigned edad : 4; unsigned peso : 2; unsigned color : 1; } Máquina con palabra de 4 bytes:... edad peso color

Programación I Es posible especificar un campo de bits sin nombre, en cuyo caso el campo se utiliza en la estructura como un campo de relleno. Operaciones y Manejo de Bits Campos de Bits: struct CamposBits { unsigned edad : 4; unsigned : 4; unsigned color : 1; } Máquina con palabra de 4 bytes:... edad color

Programación I Un campo de bits sin nombre con ancho cero, se utiliza para alinear el siguiente campo de bits en el límite de la nueva unidad de almacenamiento. Operaciones y Manejo de Bits Campos de Bits: struct CamposBits { unsigned edad : 4; unsigned : 0; unsigned color : 1; } Máquina con palabra de 4 bytes:... edad color...

Programación I Los campos de bits son accedidos del mismo modo que los miembros de otras estructuras y pueden aparecer en expresiones aritméticas como cantidades enteras sin signo. Sin embargo, hay restricciones en su uso, como lo son: Operaciones y Manejo de Bits Campos de Bits: No se permiten arreglos de campos de bits. El operador & dirección no se puede aplicar a un campo de bits. Un puntero no puede acceder a un campo de bits. Una función no puede devolver un campo de bits.

Programación I Operaciones y Manejo de Bits Ejemplo de Campos de Bits: struct estudiante { unsigned edad : 7; /*Entre 0 y 70 años*/ unsigned : 1; unsigned carrera: 4; /*Existen 11 carreras*/ unsigned : 4; unsigned sexo : 1; } Máquina con palabra de 4 bytes:... edad carrera sexo

Programación I Operaciones y Manejo de Bits Ejemplo de Campos de Bits. #include “stdio.h” #include “conio.h” typedef struct { unsigned edad : 7; /*entre 0 y 70 años*/ unsigned : 1; unsigned carrera: 4; /*Existen 11 carreras*/ unsigned : 4; unsigned sexo : 1; } Estudiante; printf(“\nCarrera: 0 ->Informatica”); printf(“\n 1 ->Electrónica”); printf(“\n 6 ->Ambiental\n”); scanf(“%d”, &carrera); vector[i].carrera=carrera; printf(“\nIngrese el sexo F/M: ”); s=toupper(getche()); vector[i].sexo = (s==‘F’)? 0: 1; fflush(stdin); } for (i=0; i<5; i++) { printf(“\n\nEdad: %d”, vector[i].edad); printf(“\nCarrera: %d”, vector[i].carrera); printf(“\nSexo: %d”, vector[i].sexo); } getch(); } void main() { Estudiante vector[5]; int i, edad, carrera; char s; for (i=0; i<5; i++) { printf(“\nIngrese la edad: ”); scanf(“%d”, &edad); vector[i].edad=edad;

Programación I Conceptos Avanzados de Programación Operaciones y Manejo de Bits