SlideShare una empresa de Scribd logo
1 de 25
MANEJO DE BITS
INTRODUCCIÓN 
 Una computadora sin software sólo tiene 
capacidades para hacer operaciones 
aritméticas simples (sumas, restas, 
multiplicación, etc.)
INTRODUCCIÓN 
 El software se vale de estas simples 
operaciones para crear interfaces como las 
que vemos en los modernos sistemas 
operativos.
INTRODUCCIÓN 
 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 
 El lenguaje de programación C++ es un 
lenguaje de nivel medio; esto significa que, 
entre otras cosas, se pueden realizar 
operaciones a nivel de bits. 
 Esta es una interacción directa con el 
hardware y por lo tanto es mucho más rápida 
que la programación a alto nivel.
OPERADORES QUE VEREMOS 
 "~“ 
 "<<" 
 ">>" 
 "&“ 
 "|“ 
 "^“
~ 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; 
}
& 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. 
1 & 1 = 1 0 & 0 
1 & 1 0 
1 & 0
¿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 AND 
void 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"; 
} 
}
| 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

Más contenido relacionado

Destacado (20)

13 Instrucciones de manejo de bits
13  Instrucciones de manejo de bits13  Instrucciones de manejo de bits
13 Instrucciones de manejo de bits
 
Generalidades
GeneralidadesGeneralidades
Generalidades
 
Arreglos
ArreglosArreglos
Arreglos
 
unidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOS
unidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOSunidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOS
unidad 1 INTRODUCCION A LAS ESTUCTURAS DE DATOS
 
Estructura de un Programa en C++
Estructura de un Programa en C++Estructura de un Programa en C++
Estructura de un Programa en C++
 
Capitulo II
Capitulo IICapitulo II
Capitulo II
 
Estructura de datos c++
Estructura de datos c++ Estructura de datos c++
Estructura de datos c++
 
Clase 7
Clase 7Clase 7
Clase 7
 
Clase3
Clase3Clase3
Clase3
 
12 Arreglos
12 Arreglos12 Arreglos
12 Arreglos
 
Administración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicosAdministración de memoria arreglos dinamicos
Administración de memoria arreglos dinamicos
 
Funciones en visual basic
Funciones en visual basicFunciones en visual basic
Funciones en visual basic
 
Fundamentos Informáticos Hardware Software
Fundamentos Informáticos Hardware SoftwareFundamentos Informáticos Hardware Software
Fundamentos Informáticos Hardware Software
 
Arreglos, Procedimientos y Funciones
Arreglos, Procedimientos y FuncionesArreglos, Procedimientos y Funciones
Arreglos, Procedimientos y Funciones
 
Tipo de Arreglos
Tipo de ArreglosTipo de Arreglos
Tipo de Arreglos
 
Clase 10 Estructuras De Datos Y Arreglos
Clase 10 Estructuras De Datos Y ArreglosClase 10 Estructuras De Datos Y Arreglos
Clase 10 Estructuras De Datos Y Arreglos
 
Estructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractosEstructuras de datos y tipos de datos abstractos
Estructuras de datos y tipos de datos abstractos
 
Arreglos c++
Arreglos c++Arreglos c++
Arreglos c++
 
Tipos De Datos
Tipos De DatosTipos De Datos
Tipos De Datos
 
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
Estructura de Datos Unidad 1 Tipo abstracto de datos TADEstructura de Datos Unidad 1 Tipo abstracto de datos TAD
Estructura de Datos Unidad 1 Tipo abstracto de datos TAD
 

Similar a Manejo de bits en C

Manejo de bits
Manejo de bitsManejo de bits
Manejo de bitsUVM
 
Tipos de operadores_dulce_velazquez
Tipos de operadores_dulce_velazquezTipos de operadores_dulce_velazquez
Tipos de operadores_dulce_velazquezRosario Garcia Ruiz
 
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 f87xxJose 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 f87xxJose 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 f87xxfreddymadriz
 
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++luzgaray6
 
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++luzgaray6
 
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++luzgaray6
 
Tipos de operadores_de_c_
Tipos de operadores_de_c_Tipos de operadores_de_c_
Tipos de operadores_de_c_LuisFrancisco02
 

Similar a Manejo de bits en C (20)

Manejo de bits
Manejo de bitsManejo de bits
Manejo de bits
 
tipos de operadores
tipos de operadores tipos de operadores
tipos de operadores
 
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
 
Tipos de operadores_dulce_velazquez
Tipos de operadores_dulce_velazquezTipos de operadores_dulce_velazquez
Tipos de operadores_dulce_velazquez
 
Unidad aritmetico logica ALU
Unidad aritmetico logica ALUUnidad aritmetico logica ALU
Unidad aritmetico logica ALU
 
Operadores de c_..
Operadores de c_..Operadores de c_..
Operadores de c_..
 
Operadores de c++
Operadores de c++Operadores de c++
Operadores de c++
 
OPERADORES PARA C++
OPERADORES PARA C++OPERADORES PARA C++
OPERADORES PARA C++
 
Diapo04
Diapo04Diapo04
Diapo04
 
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
 
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_de_c_
Tipos de operadores_de_c_Tipos de operadores_de_c_
Tipos de operadores_de_c_
 
Tipos de operadores_de_c_
Tipos de operadores_de_c_Tipos de operadores_de_c_
Tipos de operadores_de_c_
 
Elementos de programacion t1
Elementos de programacion t1Elementos de programacion t1
Elementos de programacion t1
 

Más de UVM

Tiempo compartido en programación
Tiempo compartido en programaciónTiempo compartido en programación
Tiempo compartido en programaciónUVM
 
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 AvanzadaUVM
 
Eficiencia en uso tiempo
Eficiencia en uso  tiempoEficiencia en uso  tiempo
Eficiencia en uso tiempoUVM
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglosUVM
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadoresUVM
 
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 stlUVM
 
Breve repaso de apuntadores
Breve repaso de apuntadoresBreve repaso de apuntadores
Breve repaso de apuntadoresUVM
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicosUVM
 
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 datosUVM
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funcionesUVM
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funcionesUVM
 
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 septiembreUVM
 
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 3UVM
 
Funciones definidas por el usuario
Funciones definidas por el usuarioFunciones definidas por el usuario
Funciones definidas por el usuarioUVM
 
Función main()
Función main()Función main()
Función main()UVM
 
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++UVM
 
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 agostoUVM
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++UVM
 
Objetos y arreglos en C#
Objetos y arreglos en C#Objetos y arreglos en C#
Objetos y arreglos en C#UVM
 
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 UVM
 

Más de UVM (20)

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
 
Practica de arreglos
Practica de arreglosPractica de arreglos
Practica de arreglos
 
Otra introducción a apuntadores
Otra introducción a apuntadoresOtra introducción a apuntadores
Otra introducción a apuntadores
 
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
 
Arreglos conceptos básicos
Arreglos conceptos básicosArreglos conceptos básicos
Arreglos conceptos básicos
 
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
 
Resumen de funciones
Resumen de funcionesResumen de funciones
Resumen de funciones
 
Biblioteca estándar de funciones
Biblioteca estándar de funcionesBiblioteca estándar de funciones
Biblioteca estándar de funciones
 
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
 
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
 
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()
 
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++
 
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
 
Estructura programa c++
Estructura programa c++Estructura programa c++
Estructura programa c++
 
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
 

Último

SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxlclcarmen
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxPryhaSalam
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuaDANNYISAACCARVAJALGA
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfMaryRotonda1
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdfgimenanahuel
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIACarlos Campaña Montenegro
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADauxsoporte
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticosisabeltrejoros
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...JAVIER SOLIS NOYOLA
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptELENA GALLARDO PAÚLS
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.José Luis Palma
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arteRaquel Martín Contreras
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Lourdes Feria
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dstEphaniiie
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxKarlaMassielMartinez
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 

Último (20)

SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptxSINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
SINTAXIS DE LA ORACIÓN SIMPLE 2023-2024.pptx
 
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptxEXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
EXPANSIÓN ECONÓMICA DE OCCIDENTE LEÓN.pptx
 
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdfPlanificacion Anual 4to Grado Educacion Primaria   2024   Ccesa007.pdf
Planificacion Anual 4to Grado Educacion Primaria 2024 Ccesa007.pdf
 
cortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahuacortes de luz abril 2024 en la provincia de tungurahua
cortes de luz abril 2024 en la provincia de tungurahua
 
Manual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdfManual - ABAS II completo 263 hojas .pdf
Manual - ABAS II completo 263 hojas .pdf
 
30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf30-de-abril-plebiscito-1902_240420_104511.pdf
30-de-abril-plebiscito-1902_240420_104511.pdf
 
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIARAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
RAIZ CUADRADA Y CUBICA PARA NIÑOS DE PRIMARIA
 
CALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDADCALENDARIZACION DE MAYO / RESPONSABILIDAD
CALENDARIZACION DE MAYO / RESPONSABILIDAD
 
texto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticostexto argumentativo, ejemplos y ejercicios prácticos
texto argumentativo, ejemplos y ejercicios prácticos
 
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
ACERTIJO DE LA BANDERA OLÍMPICA CON ECUACIONES DE LA CIRCUNFERENCIA. Por JAVI...
 
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.pptDE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
DE LAS OLIMPIADAS GRIEGAS A LAS DEL MUNDO MODERNO.ppt
 
Power Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptxPower Point: "Defendamos la verdad".pptx
Power Point: "Defendamos la verdad".pptx
 
Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.Clasificaciones, modalidades y tendencias de investigación educativa.
Clasificaciones, modalidades y tendencias de investigación educativa.
 
Historia y técnica del collage en el arte
Historia y técnica del collage en el arteHistoria y técnica del collage en el arte
Historia y técnica del collage en el arte
 
Sesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdfSesión de clase: Defendamos la verdad.pdf
Sesión de clase: Defendamos la verdad.pdf
 
Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...Caja de herramientas de inteligencia artificial para la academia y la investi...
Caja de herramientas de inteligencia artificial para la academia y la investi...
 
Dinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes dDinámica florecillas a María en el mes d
Dinámica florecillas a María en el mes d
 
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptxTECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
TECNOLOGÍA FARMACEUTICA OPERACIONES UNITARIAS.pptx
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 

Manejo de bits en C

  • 2. INTRODUCCIÓN  Una computadora sin software sólo tiene capacidades para hacer operaciones aritméticas simples (sumas, restas, multiplicación, etc.)
  • 3. INTRODUCCIÓN  El software se vale de estas simples operaciones para crear interfaces como las que vemos en los modernos sistemas operativos.
  • 4. INTRODUCCIÓN  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.
  • 5. INTRODUCCIÓN  El lenguaje de programación C++ es un lenguaje de nivel medio; esto significa que, entre otras cosas, se pueden realizar operaciones a nivel de bits.  Esta es una interacción directa con el hardware y por lo tanto es mucho más rápida que la programación a alto nivel.
  • 6. OPERADORES QUE VEREMOS  "~“  "<<"  ">>"  "&“  "|“  "^“
  • 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
  • 8. 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; }
  • 9. << 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.
  • 10. << 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
  • 11. 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; }
  • 12. >> 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++)
  • 13. 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; }
  • 14. & 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. 1 & 1 = 1 0 & 0 1 & 1 0 1 & 0
  • 15. ¿CUÁL ES EL RESULTADO DE APLICAR EL OPERADOR AND? 1 1 0 1 0 1 0 1 1 0 0 1
  • 16. 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:
  • 17. 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.
  • 18. PROCEDIMIENTO DE EJEMPLO AND void 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; }
  • 19. 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
  • 20. USO PRÁCTICO  Si se requiere saber si un usuario posee permisos de escritura, se aplica máscara AND con valor 2.
  • 21. 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.
  • 22. ¿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
  • 23. 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"; } }
  • 24. | 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
  • 25. ^ 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

Notas del editor

  1. El resultado es 0 1 0 0 0 1