SlideShare uma empresa Scribd logo
1 de 24
MANEJO DE BITS
INTRODUCCIÓN
 Una computadora sin software sólo tiene
capacidades para hacer operaciones aritméticas
simples (sumas, restas, multiplicación, etc.)
 El software se vale de estas simples operaciones
para crear interfaces como las que vemos en los
modernos sistemas operativos.
 Todos los lenguajes, desde los más altos como
“PHP”, hasta los más bajos como “Ensamblador”,
pasan por binario; cada vez que se mueve el ratón
se invocan procesamiento de datos binarios.
INTRODUCCIÓN
 Una de las razones por las que C y C++ se han
hecho tan populares es por que el lenguaje ofrece
muchos operadores de manipulación de bits a bajo
nivel.
 Los operadores de manipulación de bits (bitwise)
ejecutan operaciones lógicas sobre cada uno de
los bits de los operandos.
 Estas operaciones son comparables en eficiencia y
en velocidad a sus equivalentes en lenguaje
ensamblador.
INTRODUCCIÓN
 Cada operador de manipulación de bits realiza una
operación lógica, bit a bit, sobre datos internos.
 Los operadores de manipulación de bits se aplican
sólo a variables y constantes char, int y long, y no a
datos con punto flotante.
 Dado que los números binarios constan de 1’s y 0’s
(bits) estos 1 y 0 se manipulan para producir el
resultado deseado para cada uno de los
operadores.
OPERADORES QUE VEREMOS
 "&“
 "|“
 "^“
 "~“
 "<<"
 ">>"
& OPERADOR AND
 & operador AND de bits (sólo aplicables a variables de
tipo entero)
 El operador & (no confundir con el operador lógico &&) es un
operador lógico a nivel de bits.
 Compara un par de cadenas de bits por bit; el resultado para
cada comparación es 1 si los bits comparados son ambos 1, y
0 en otro caso.
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
¿CUÁL ES EL RESULTADO DE APLICAR EL
OPERADOR AND?
1 1 0 1 0 1
0 1 1 0 0 1
OPERADOR &
 Con este operador & se puede ocultar un conjunto
de bits que no son relevantes en determinada
situación.
 Esto constituye una máscara de bits.
 Consideremos un pequeño problema y elaborar
una solución:
OPERADOR &
 En un ciclo controlado por la variable TAMANO, es
necesario imprimir el valor del contador sólo desde
0 hasta 15, y comenzar después en 0, aún cuando
TAMANO se siga incrementando.
PROCEDIMIENTO DE EJEMPLO ANDvoid operadorAND(void){
/*+++++++++++++++++++++++++++++++++++++++*
*Este procedimiento recibe un par de numeros *
*e imprime el resultado de aplicarles el *
*operador binario & *
*+++++++++++++++++++++++++++++++++++++++*/
int x;
int y;
int res;
cout << "nEste programa hace uso del operador binario &n";
cout << "nIntroduzca un entero: ";
cin >> x;
cout << "nIntroduzca un segundo entero: ";
cin >> y;
res = x&y;
cout << x <<" " << y << " " << res;
}
USO PRÁCTICO
 Tablas de estatus o permisos – se tiene un campo
“permisos” en la base de datos que corresponde a
un campo tipo integer, donde el valor
1 = lectura
2 = escritura Cada valor corresponde
4 = ejecución a un bit encendido
8 = otro permiso
Si se lee 3 significa lectura y
escritura.
6 = escritura y ejecución
USO PRÁCTICO
 Si se requiere saber si un usuario posee permisos
de escritura, se aplica máscara AND con valor 2.
EJEMPLO DE USO PRÁCTICO
 Investiga el valor binario de 1, 2 y 4
 Recuerda que 1 significa lectura, 2 significa
escritura y 4 significa ejecución.
 Para saber qué permisos tiene un usuario, se
aplica el permiso que uno busca con un operador
AND y el permiso que tiene el usuario.
¿QUÉ PUEDE HACER CADA USUARIO?
 Permisos lectura 0 0 0 0 0 0 0 1
 Permisos escritura 0 0 0 0 0 0 1 0
 Permisos ejecución 0 0 0 0 0 1 0 0
 Permisos usuarioA 0 0 0 0 0 1 1 0
 Permisos usuarioB 0 0 0 0 0 0 1 1
 Permisos usuarioC 0 0 0 0 1 1 1 1
PROCEDIMIENTO DE EJEMPLO MÁSCARA/*+++++++++++++++++++++++++++++++++++++++++++++
* Este procedimiento imprime ciclicamente valores +
* de una variable por debajo de un limite, +
* por medio de una mascara de bits. +
* +++++++++++++++++++++++++++++++++++++++++++*/
#define TAMANO 200
#define LIMITE 15
//LIMITE funciona como una máscara que oculta los bits a la izquierda de
//último 1 a la izquierda.
…
void MASCARA (void){
int i = 0, mascara;
for (i = 0; i < TAMANO; i++)
{
mascara = i & LIMITE;
cout << mascara << "n";
}
}
07/09/2015
15
Mtl.LourdesCahuich
| OR INCLUSIVO (PALABRA CLAVE BITOR)
 Este operador binario tiene un funcionamiento parecido
a los anteriores (AND y XOR), salvo que en este caso el
resultado es 1 si alguno de ellos está a 1. En caso
contrario devuelve 0 (ver ejemplo).
 Ejemplo:
int x = 10, y = 20;
int z = x | y; // equivale a:
int z = x bitor y;
 Según el enunciado, el operador | aplicado entre los
valores 6 y 13 resultaría:
6 == 0000 0110
13 == 0000 1101
------------------
0000 1111 == 15
^ XOR OR EXCLUSIVO (PALABRA CLAVE
XOR)
 El funcionamiento de este operador binario es parecido
al AND lógico , salvo que en este caso el resultado es 1
si ambos bits son complementarios (uno es 0 y el otro
1). En caso contrario devuelve 0.
 Ejemplo:
int x = 10, y = 20;
int z = x ^ y; // equivale a: int z = x xor y;
Según el enunciado, el operador ^ aplicado entre los
valores 7 y -2 resultaría:
7 == 0000 0111
-2 == 1111 1110
------------------
1111 1001 == -7
~ COMPLEMENTO A UNO
(PALABRA CLAVE COMPL)
 Este operador unitario invierte cada bit del operando; 0
es convertido en 1 y viceversa.
 La representación binaria de los complementos a uno de
los decimales 0, 1 y 2 son los que se expresan (para
simplificar los representamos como un octeto):
0 == 0000 0000 ~ 0 == 1111 1111
1 == 0000 0001 ~ 1 == 1111 1110
2 == 0000 0010 ~ 2 == 1111 1101
PROCEDIMIENTO DE EJEMPLO
void complementoAuno(void){
/*+++++++++++++++++++++++++++++++++++++++++++++
* Este procedimiento cambia un numero sin sigo a +
* su complemento a uno a nivel de bits +
* ++++++++++++++++++++++++++++++++++++++++++*/
short signed cero = 0, uno = 1, dos = 2;
cout << "~0 == " << ~cero << endl;
cout << "~1 == " << ~uno << endl;
cout << "~2 == " << ~dos << endl;
}
<< DESPLAZAMIENTO A IZQUIERDA
 Este operador binario realiza un desplazamiento de
bits a la izquierda. El bit más significativo (más a la
izquierda) se pierde, y se le asigna un 0 al menos
significativo (el de la derecha). El operando
derecho indica el número de desplazamientos que
se realizarán.
 Recuerde que los desplazamientos no son
rotaciones; los bits que salen por la izquierda se
pierden, los que entran por la derecha se rellenan
con ceros. Este tipo de desplazamientos se
denominan lógicos en contraposición a los cíclicos
o rotacionales.
<< DESPLAZAMIENTO A IZQUIERDA
unsigned long x = 10;
int y = 2;
unsigned long z = x << y;
 Según las premisas anteriores, los
desplazamientos izquierda de valor unitario
aplicados sobre los números 0, 1, 2 y -3, producen
los siguientes resultados:
0 == 0000 0000 0 << 1 == 0000 0000 == 0
1 == 0000 0001 1 << 1 == 0000 0010 == 2
2 == 0000 0010 2 << 1 == 0000 0100 == 4
-3 == 1111 1101 -3 << 1 == 1111 1010 == - 6
PROCEDIMIENTO DE EJEMPLO
void desplazamientoAIzquierda(void){
int x = 1;
// Los operadores de bits solo se aplican a variables
unsigned
cout << "nEl tamanio de una variable int es: " <<
sizeof(int) << endl;
cout << "nEl valor inicial de x: " << x << endl;
for (unsigned i = 1; i <= 8; i++)
{
unsigned desplazado = x << i;
cout << "nEl numero: " << desplazado << endl;
}
cout << "nEl valor final de x: " << x << endl;
}
>> DESPLAZAMIENTO A DERECHA
 Igual que el desplazamiento a la izquierda, pero el
desplazamiento de bits es, obviamente, a la
derecha.
 Sintaxis
expr-desplazada >> expr-desplazamiento
0 == 0000 0000 0 >> 1 == 0000 0000 == 0
2 == 0000 0010 2 >> 1 == 0000 0001 == 1
-2 == 1111 1110 -2 >> 1 == 1111 1111 == -1
(C++Builder & GNU-C++)
-16 == 1111 0000 -16 >> 2 == 1111 1100 == -4
(C++Builder & GNU-C++)
PROCEDIMIENTO DE EJEMPLO
void desplazamientoADerecha(void){
/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
* Este procedimiento hace uso de el operador de desplazamiento *
* hacia la derecha >> *
*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
int x = 128;
cout << "nEl tamanio de una variable int es: " << sizeof(int) << endl;
cout << "nEl valor inicial de x: " << x << endl;
for (unsigned i = 1; i <= 8; i++)
{
unsigned desplazado = x >> i;
cout << "nEl numero: " << desplazado << endl;
}
cout << "nEl valor final de x: " << x << endl;
}

Mais conteúdo relacionado

Mais procurados

Mais procurados (20)

Estructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busquedaEstructura de Datos - Unidad 6 Metodos de busqueda
Estructura de Datos - Unidad 6 Metodos de busqueda
 
Arboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en JavaArboles y Colas de Prioridad en Java
Arboles y Colas de Prioridad en Java
 
Metodos de ordenamiento 2
Metodos de ordenamiento 2Metodos de ordenamiento 2
Metodos de ordenamiento 2
 
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrenteTópicos Avanzados de Programación - Unidad 3 programacion concurrente
Tópicos Avanzados de Programación - Unidad 3 programacion concurrente
 
OPERADORES PARA C++
OPERADORES PARA C++OPERADORES PARA C++
OPERADORES PARA C++
 
Búsqueda secuencial y binaria
Búsqueda secuencial y binariaBúsqueda secuencial y binaria
Búsqueda secuencial y binaria
 
Operadores en c_ (1)
Operadores en c_ (1)Operadores en c_ (1)
Operadores en c_ (1)
 
Backtracking
BacktrackingBacktracking
Backtracking
 
Salto condicional
Salto condicionalSalto condicional
Salto condicional
 
Pila estructura de datos
Pila estructura de datosPila estructura de datos
Pila estructura de datos
 
Elementos basicos c++
Elementos basicos c++Elementos basicos c++
Elementos basicos c++
 
Analisis sintactico
Analisis sintacticoAnalisis sintactico
Analisis sintactico
 
Unidad 5
Unidad 5Unidad 5
Unidad 5
 
Arboles Binarios
Arboles BinariosArboles Binarios
Arboles Binarios
 
Lenguaje Ensamblador
Lenguaje EnsambladorLenguaje Ensamblador
Lenguaje Ensamblador
 
Ejercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informadaEjercicios de búsqueda a Ciegas y Búsqueda informada
Ejercicios de búsqueda a Ciegas y Búsqueda informada
 
Modos direccionamiento
Modos direccionamientoModos direccionamiento
Modos direccionamiento
 
Modos De Direccionamiento
Modos De Direccionamiento Modos De Direccionamiento
Modos De Direccionamiento
 
Colas en programacion
Colas en programacionColas en programacion
Colas en programacion
 
Tipos de listas en estructura de datos
Tipos de listas en estructura de datosTipos de listas en estructura de datos
Tipos de listas en estructura de datos
 

Destaque

Destaque (14)

Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3Aclaraciones varias a códigos entregados en sesión 3
Aclaraciones varias a códigos entregados en sesión 3
 
Ejemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stlEjemplo de solución de práctica funciones stl
Ejemplo de solución de práctica funciones stl
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadores
 
Algunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agostoAlgunas dudas de la sesión 28 agosto
Algunas dudas de la sesión 28 agosto
 
Aclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembreAclaración de dudas 4 de septiembre
Aclaración de dudas 4 de septiembre
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funciones
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicos
 
Depuración de un programa en c++
Depuración de un programa en c++Depuración de un programa en c++
Depuración de un programa en c++
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuario
 
Función main()
Función main()Función main()
Función main()
 
Resolución práctica de tipos de datos
Resolución práctica de tipos de datosResolución práctica de tipos de datos
Resolución práctica de tipos de datos
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funciones
 

Semelhante a Manejo de bits

Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
freddymadriz
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Jose Manuel Mansilla Carrasco
 
Digital
DigitalDigital
Digital
toni
 
Digital E
Digital EDigital E
Digital E
toni
 

Semelhante a Manejo de bits (20)

Manejo de bits -operadores de bits C++
Manejo de bits -operadores de bits C++Manejo de bits -operadores de bits C++
Manejo de bits -operadores de bits C++
 
tipos de operadores
tipos de operadores tipos de operadores
tipos de operadores
 
Unidad aritmetico logica ALU
Unidad aritmetico logica ALUUnidad aritmetico logica ALU
Unidad aritmetico logica ALU
 
Semana 5-Conceptualziación del lenguaje de programación C++
Semana 5-Conceptualziación del lenguaje de programación C++Semana 5-Conceptualziación del lenguaje de programación C++
Semana 5-Conceptualziación del lenguaje de programación C++
 
Semana 1-Conceptualziación del lenguaje d eprogramación C++
Semana 1-Conceptualziación del lenguaje d eprogramación C++Semana 1-Conceptualziación del lenguaje d eprogramación C++
Semana 1-Conceptualziación del lenguaje d eprogramación C++
 
Semana 2-Conceptualización del lenguaje de programación C++
Semana 2-Conceptualización del lenguaje de programación C++Semana 2-Conceptualización del lenguaje de programación C++
Semana 2-Conceptualización del lenguaje de programación C++
 
Tipos de operadores_dulce_velazquez
Tipos de operadores_dulce_velazquezTipos de operadores_dulce_velazquez
Tipos de operadores_dulce_velazquez
 
Tipos de operadores_dulce
Tipos de operadores_dulceTipos de operadores_dulce
Tipos de operadores_dulce
 
Tipos de operadores_velazquez
Tipos de operadores_velazquezTipos de operadores_velazquez
Tipos de operadores_velazquez
 
Tipos de operadores
Tipos de operadoresTipos de operadores
Tipos de operadores
 
Operadores de c_..
Operadores de c_..Operadores de c_..
Operadores de c_..
 
Operadores de c++
Operadores de c++Operadores de c++
Operadores de c++
 
C sharp
C sharpC sharp
C sharp
 
Diapo04
Diapo04Diapo04
Diapo04
 
Proyecto1
Proyecto1Proyecto1
Proyecto1
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Curso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xxCurso de programacion en c++ para microcontroladores pic 16 f87xx
Curso de programacion en c++ para microcontroladores pic 16 f87xx
 
Digital
DigitalDigital
Digital
 
Digital E
Digital EDigital E
Digital E
 

Mais de UVM

Mais de UVM (16)

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programación
 
Portafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación AvanzadaPortafolio de evidencias del curso Programación Avanzada
Portafolio de evidencias del curso Programación Avanzada
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempo
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicos
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglos
 
Objetos y arreglos en C#
Objetos y arreglos en C#Objetos y arreglos en C#
Objetos y arreglos en C#
 
Una solución para agregar estructura de repetición
Una solución para agregar estructura de repetición Una solución para agregar estructura de repetición
Una solución para agregar estructura de repetición
 
Repaso previo a 2º examen parcial
Repaso previo a 2º examen parcialRepaso previo a 2º examen parcial
Repaso previo a 2º examen parcial
 
Polimorfismo
PolimorfismoPolimorfismo
Polimorfismo
 
Namespaces y C#
Namespaces y C#Namespaces y C#
Namespaces y C#
 
Tipos de herencia
Tipos de herenciaTipos de herencia
Tipos de herencia
 
Herencia 1ª parte
Herencia 1ª parteHerencia 1ª parte
Herencia 1ª parte
 
Agregando comportamiento al objeto – estructuras de repetición
Agregando comportamiento al objeto – estructuras de repeticiónAgregando comportamiento al objeto – estructuras de repetición
Agregando comportamiento al objeto – estructuras de repetición
 
Agregando comportamiento al objeto – estructuras de decision
Agregando comportamiento al objeto – estructuras de decisionAgregando comportamiento al objeto – estructuras de decision
Agregando comportamiento al objeto – estructuras de decision
 
Presentación de proyectos semestrales 01-15
Presentación de proyectos semestrales 01-15Presentación de proyectos semestrales 01-15
Presentación de proyectos semestrales 01-15
 
Creación de archivos de clases en c#
Creación de archivos de clases en c#Creación de archivos de clases en c#
Creación de archivos de clases en c#
 

Último

🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
EliaHernndez7
 
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdfPROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
EduardoJosVargasCama1
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
jlorentemartos
 

Último (20)

Novena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan EudesNovena de Pentecostés con textos de san Juan Eudes
Novena de Pentecostés con textos de san Juan Eudes
 
Lecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigosLecciones 06 Esc. Sabática. Los dos testigos
Lecciones 06 Esc. Sabática. Los dos testigos
 
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).pptPINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
PINTURA DEL RENACIMIENTO EN ESPAÑA (SIGLO XVI).ppt
 
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
Procedimientos para la planificación en los Centros Educativos tipo V ( multi...
 
Código Civil de la República Bolivariana de Venezuela
Código Civil de la República Bolivariana de VenezuelaCódigo Civil de la República Bolivariana de Venezuela
Código Civil de la República Bolivariana de Venezuela
 
Desarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por ValoresDesarrollo y Aplicación de la Administración por Valores
Desarrollo y Aplicación de la Administración por Valores
 
Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024Tema 10. Dinámica y funciones de la Atmosfera 2024
Tema 10. Dinámica y funciones de la Atmosfera 2024
 
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
1ro Programación Anual D.P.C.C planificación anual del área para el desarroll...
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 4ºESO
 
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLAACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
ACRÓNIMO DE PARÍS PARA SU OLIMPIADA 2024. Por JAVIER SOLIS NOYOLA
 
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
🦄💫4° SEM32 WORD PLANEACIÓN PROYECTOS DARUKEL 23-24.docx
 
Revista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdfRevista Apuntes de Historia. Mayo 2024.pdf
Revista Apuntes de Historia. Mayo 2024.pdf
 
Biografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdfBiografía de Charles Coulomb física .pdf
Biografía de Charles Coulomb física .pdf
 
Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024Prueba libre de Geografía para obtención título Bachillerato - 2024
Prueba libre de Geografía para obtención título Bachillerato - 2024
 
Supuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docxSupuestos_prácticos_funciones.docx
Supuestos_prácticos_funciones.docx
 
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptxCONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
CONCURSO NACIONAL JOSE MARIA ARGUEDAS.pptx
 
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdfPROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
PROPUESTA COMERCIAL SENA ETAPA 2 ACTIVIDAD 3.pdf
 
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
TEMA 14.DERIVACIONES ECONÓMICAS, SOCIALES Y POLÍTICAS DEL PROCESO DE INTEGRAC...
 
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPCTRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
TRABAJO FINAL TOPOGRAFÍA COMPLETO DE LA UPC
 
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESOPrueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
Prueba de evaluación Geografía e Historia Comunidad de Madrid 2º de la ESO
 

Manejo de bits

  • 2. INTRODUCCIÓN  Una computadora sin software sólo tiene capacidades para hacer operaciones aritméticas simples (sumas, restas, multiplicación, etc.)  El software se vale de estas simples operaciones para crear interfaces como las que vemos en los modernos sistemas operativos.  Todos los lenguajes, desde los más altos como “PHP”, hasta los más bajos como “Ensamblador”, pasan por binario; cada vez que se mueve el ratón se invocan procesamiento de datos binarios.
  • 3. INTRODUCCIÓN  Una de las razones por las que C y C++ se han hecho tan populares es por que el lenguaje ofrece muchos operadores de manipulación de bits a bajo nivel.  Los operadores de manipulación de bits (bitwise) ejecutan operaciones lógicas sobre cada uno de los bits de los operandos.  Estas operaciones son comparables en eficiencia y en velocidad a sus equivalentes en lenguaje ensamblador.
  • 4. INTRODUCCIÓN  Cada operador de manipulación de bits realiza una operación lógica, bit a bit, sobre datos internos.  Los operadores de manipulación de bits se aplican sólo a variables y constantes char, int y long, y no a datos con punto flotante.  Dado que los números binarios constan de 1’s y 0’s (bits) estos 1 y 0 se manipulan para producir el resultado deseado para cada uno de los operadores.
  • 5. OPERADORES QUE VEREMOS  "&“  "|“  "^“  "~“  "<<"  ">>"
  • 6. & OPERADOR AND  & operador AND de bits (sólo aplicables a variables de tipo entero)  El operador & (no confundir con el operador lógico &&) es un operador lógico a nivel de bits.  Compara un par de cadenas de bits por bit; el resultado para cada comparación es 1 si los bits comparados son ambos 1, y 0 en otro caso. 0 & 0 = 0 0 & 1 = 0 1 & 0 = 0 1 & 1 = 1
  • 7. ¿CUÁL ES EL RESULTADO DE APLICAR EL OPERADOR AND? 1 1 0 1 0 1 0 1 1 0 0 1
  • 8. OPERADOR &  Con este operador & se puede ocultar un conjunto de bits que no son relevantes en determinada situación.  Esto constituye una máscara de bits.  Consideremos un pequeño problema y elaborar una solución:
  • 9. OPERADOR &  En un ciclo controlado por la variable TAMANO, es necesario imprimir el valor del contador sólo desde 0 hasta 15, y comenzar después en 0, aún cuando TAMANO se siga incrementando.
  • 10. PROCEDIMIENTO DE EJEMPLO ANDvoid operadorAND(void){ /*+++++++++++++++++++++++++++++++++++++++* *Este procedimiento recibe un par de numeros * *e imprime el resultado de aplicarles el * *operador binario & * *+++++++++++++++++++++++++++++++++++++++*/ int x; int y; int res; cout << "nEste programa hace uso del operador binario &n"; cout << "nIntroduzca un entero: "; cin >> x; cout << "nIntroduzca un segundo entero: "; cin >> y; res = x&y; cout << x <<" " << y << " " << res; }
  • 11. USO PRÁCTICO  Tablas de estatus o permisos – se tiene un campo “permisos” en la base de datos que corresponde a un campo tipo integer, donde el valor 1 = lectura 2 = escritura Cada valor corresponde 4 = ejecución a un bit encendido 8 = otro permiso Si se lee 3 significa lectura y escritura. 6 = escritura y ejecución
  • 12. USO PRÁCTICO  Si se requiere saber si un usuario posee permisos de escritura, se aplica máscara AND con valor 2.
  • 13. EJEMPLO DE USO PRÁCTICO  Investiga el valor binario de 1, 2 y 4  Recuerda que 1 significa lectura, 2 significa escritura y 4 significa ejecución.  Para saber qué permisos tiene un usuario, se aplica el permiso que uno busca con un operador AND y el permiso que tiene el usuario.
  • 14. ¿QUÉ PUEDE HACER CADA USUARIO?  Permisos lectura 0 0 0 0 0 0 0 1  Permisos escritura 0 0 0 0 0 0 1 0  Permisos ejecución 0 0 0 0 0 1 0 0  Permisos usuarioA 0 0 0 0 0 1 1 0  Permisos usuarioB 0 0 0 0 0 0 1 1  Permisos usuarioC 0 0 0 0 1 1 1 1
  • 15. PROCEDIMIENTO DE EJEMPLO MÁSCARA/*+++++++++++++++++++++++++++++++++++++++++++++ * Este procedimiento imprime ciclicamente valores + * de una variable por debajo de un limite, + * por medio de una mascara de bits. + * +++++++++++++++++++++++++++++++++++++++++++*/ #define TAMANO 200 #define LIMITE 15 //LIMITE funciona como una máscara que oculta los bits a la izquierda de //último 1 a la izquierda. … void MASCARA (void){ int i = 0, mascara; for (i = 0; i < TAMANO; i++) { mascara = i & LIMITE; cout << mascara << "n"; } } 07/09/2015 15 Mtl.LourdesCahuich
  • 16. | OR INCLUSIVO (PALABRA CLAVE BITOR)  Este operador binario tiene un funcionamiento parecido a los anteriores (AND y XOR), salvo que en este caso el resultado es 1 si alguno de ellos está a 1. En caso contrario devuelve 0 (ver ejemplo).  Ejemplo: int x = 10, y = 20; int z = x | y; // equivale a: int z = x bitor y;  Según el enunciado, el operador | aplicado entre los valores 6 y 13 resultaría: 6 == 0000 0110 13 == 0000 1101 ------------------ 0000 1111 == 15
  • 17. ^ XOR OR EXCLUSIVO (PALABRA CLAVE XOR)  El funcionamiento de este operador binario es parecido al AND lógico , salvo que en este caso el resultado es 1 si ambos bits son complementarios (uno es 0 y el otro 1). En caso contrario devuelve 0.  Ejemplo: int x = 10, y = 20; int z = x ^ y; // equivale a: int z = x xor y; Según el enunciado, el operador ^ aplicado entre los valores 7 y -2 resultaría: 7 == 0000 0111 -2 == 1111 1110 ------------------ 1111 1001 == -7
  • 18. ~ COMPLEMENTO A UNO (PALABRA CLAVE COMPL)  Este operador unitario invierte cada bit del operando; 0 es convertido en 1 y viceversa.  La representación binaria de los complementos a uno de los decimales 0, 1 y 2 son los que se expresan (para simplificar los representamos como un octeto): 0 == 0000 0000 ~ 0 == 1111 1111 1 == 0000 0001 ~ 1 == 1111 1110 2 == 0000 0010 ~ 2 == 1111 1101
  • 19. PROCEDIMIENTO DE EJEMPLO void complementoAuno(void){ /*+++++++++++++++++++++++++++++++++++++++++++++ * Este procedimiento cambia un numero sin sigo a + * su complemento a uno a nivel de bits + * ++++++++++++++++++++++++++++++++++++++++++*/ short signed cero = 0, uno = 1, dos = 2; cout << "~0 == " << ~cero << endl; cout << "~1 == " << ~uno << endl; cout << "~2 == " << ~dos << endl; }
  • 20. << DESPLAZAMIENTO A IZQUIERDA  Este operador binario realiza un desplazamiento de bits a la izquierda. El bit más significativo (más a la izquierda) se pierde, y se le asigna un 0 al menos significativo (el de la derecha). El operando derecho indica el número de desplazamientos que se realizarán.  Recuerde que los desplazamientos no son rotaciones; los bits que salen por la izquierda se pierden, los que entran por la derecha se rellenan con ceros. Este tipo de desplazamientos se denominan lógicos en contraposición a los cíclicos o rotacionales.
  • 21. << DESPLAZAMIENTO A IZQUIERDA unsigned long x = 10; int y = 2; unsigned long z = x << y;  Según las premisas anteriores, los desplazamientos izquierda de valor unitario aplicados sobre los números 0, 1, 2 y -3, producen los siguientes resultados: 0 == 0000 0000 0 << 1 == 0000 0000 == 0 1 == 0000 0001 1 << 1 == 0000 0010 == 2 2 == 0000 0010 2 << 1 == 0000 0100 == 4 -3 == 1111 1101 -3 << 1 == 1111 1010 == - 6
  • 22. PROCEDIMIENTO DE EJEMPLO void desplazamientoAIzquierda(void){ int x = 1; // Los operadores de bits solo se aplican a variables unsigned cout << "nEl tamanio de una variable int es: " << sizeof(int) << endl; cout << "nEl valor inicial de x: " << x << endl; for (unsigned i = 1; i <= 8; i++) { unsigned desplazado = x << i; cout << "nEl numero: " << desplazado << endl; } cout << "nEl valor final de x: " << x << endl; }
  • 23. >> DESPLAZAMIENTO A DERECHA  Igual que el desplazamiento a la izquierda, pero el desplazamiento de bits es, obviamente, a la derecha.  Sintaxis expr-desplazada >> expr-desplazamiento 0 == 0000 0000 0 >> 1 == 0000 0000 == 0 2 == 0000 0010 2 >> 1 == 0000 0001 == 1 -2 == 1111 1110 -2 >> 1 == 1111 1111 == -1 (C++Builder & GNU-C++) -16 == 1111 0000 -16 >> 2 == 1111 1100 == -4 (C++Builder & GNU-C++)
  • 24. PROCEDIMIENTO DE EJEMPLO void desplazamientoADerecha(void){ /*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ * Este procedimiento hace uso de el operador de desplazamiento * * hacia la derecha >> * *+++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ int x = 128; cout << "nEl tamanio de una variable int es: " << sizeof(int) << endl; cout << "nEl valor inicial de x: " << x << endl; for (unsigned i = 1; i <= 8; i++) { unsigned desplazado = x >> i; cout << "nEl numero: " << desplazado << endl; } cout << "nEl valor final de x: " << x << endl; }

Notas do Editor

  1. El resultado es 0 1 0 0 0 1