Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
Informática I Departamento de Ingeniería Electrónica Operadores de bits Operadores de bits El lenguaje C provee un conjunto de operadores para trabajar con variables enteras a nivel de bits (bitwise operators). Estas operaciones permiten operar para realizar todas las operaciones que hemos realizado con uniones y/o estructuras de bits. Los operadores de bits que provee el lenguaje son: Operador Significado & AND bit a bit (bitwise) | OR bit a bit NOT bit a bit ^ XOR bit a bit >> Desplazamiento a derecha << Desplazamiento a izquierda Operadores de bits: AND La operación AND a nivel de bit se define como: A B A AND B 0 0 0 0 1 0 1 0 0 1 1 1 Es decir, el resultado es 1 si y sólo si ambos operandos son 1. Operadores de bits: Operador & (ampersand) El operador & (ampersand) actúa sobre dos variables enteras para realizar la operación AND bit a bit. /* Ejemplo */ unsigned char A = 0x1A; unsigned char B = 0xF3; C = A & B; 0 0 0 1 1 0 1 0A 01234567 1 1 1 1 0 0 1 1B C Operadores de bits: Operador & (ampersand) El operador & (ampersand) actúa sobre dos variables enteras para realizar la operación AND bit a bit. /* Ejemplo */ unsigned char A = 0x1A; unsigned char B = 0xF3; C = A & B; 0 0 0 1 1 0 1 0A 01234567 1 1 1 1 0 0 1 1B 0 0 0 1 0 0 1 0C C=0x12 Operadores de bits: OR La operación OR a nivel de bit se define como: A B A OR B 0 0 0 0 1 1 1 0 1 1 1 1 Es decir, el resultado es 1 si al menos uno de los operandos es uno. Operadores de bits: Operador | (pipe) El operador | (pipe) actúa sobre dos variables enteras para realizar la operación OR bit a bit. /* Ejemplo */ unsigned char A = 0x27; unsigned char B = 0xD4; C = A | B; 0 0 1 0 0 1 1 1A 01234567 1 1 0 1 0 1 0 0B C Operadores de bits: Operador | (pipe) El operador | (pipe) actúa sobre dos variables enteras para realizar la operación OR bit a bit. /* Ejemplo */ unsigned char A = 0x27; unsigned char B = 0xD4; C = A | B; 0 0 1 0 0 1 1 1A 01234567 1 1 0 1 0 1 0 0B 1 1 1 1 0 1 1 1C C=0xF7 Operadores de bits: NOT La operación NOT a nivel de bit se define como: A NOT A 0 1 1 0 Es decir, el resultado el complemento del bit sobre el que se actúa. Operadores de bits: Operador ~ (tilde) El operador ~ (tilde) actúa sobre una variable entera para realizar la operación NOT bit a bit. /* Ejemplo */ unsigned char A = 0x59; C = ~A; 0 1 0 1 1 0 0 1A 01234567 C Operadores de bits: Operador ~ (tilde) El operador ~ (tilde) actúa sobre una variable entera para realizar la operación NOT bit a bit. /* Ejemplo */ unsigned char A = 0x59; C = ~A; 0 1 0 1 1 0 0 1A 01234567 1 0 1 0 0 1 1 0C C=0xA6 Operadores de bits: XOR La operación XOR a nivel de bit se define como: A B A XOR B 0 0 0 0 1 1 1 0 1 1 1 0 Es decir, el resultado es 1 si sólo uno de los operandos es igual a 1. Operadores de bits: Operador ^ (circumflex) El operador ^ (circumflex) actúa sobre dos variables enteras para realizar la operación XOR bit a bit. /* Ejemplo */ unsigned char A = 0x12; unsigned char B = 0xBF; C = A ^ B; 0 0 0 1 0 0 1 0A 01234567 1 0 1 1 1 1 1 1B C Operadores de bits: Operador ^ (circumflex) El operador ^ (circumflex) actúa sobre dos variables enteras para realizar la operación XOR bit a bit. /* Ejemplo */ unsigned char A = 0x12; unsigned char B = 0xBF; C = A ^ B; 0 0 0 1 0 0 1 0A 01234567 1 0 1 1 1 1 1 1B 1 0 1 0 1 1 0 1C C=0xAD Operadores de bits: Operadores >> y << Los operadores de desplazamiento (shift operators) >> y << desplazan los bits de las variables enteras a izquierda o derecha. /* Ejemplo */ unsigned char A = 0x12; C = A >> 2; 0 0 0 1 0 0 1 0A 01234567 C Operadores de bits: Operadores >> y << Los operadores de desplazamiento (shift operators) >> y << desplazan los bits de las variables enteras a izquierda o derecha. /* Ejemplo */ unsigned char A = 0x12; C = A >> 2; 0 0 0 1 0 0 1 0A 01234567 0 0 0 0 0 1 0 0C C=0x04 Operadores de bits: Operadores >> y << Los operadores de desplazamiento (shift operators) >> y << desplazan los bits de las variables enteras a izquierda o derecha. /* Ejemplo */ unsigned char A = 0x12; C = A << 3; 0 0 0 1 0 0 1 0A 01234567 C Operadores de bits: Operadores >> y << Los operadores de desplazamiento (shift operators) >> y << desplazan los bits de las variables enteras a izquierda o derecha. /* Ejemplo */ unsigned char A = 0x12; C = A << 3; 0 0 0 1 0 0 1 0A 01234567 1 0 0 1 0 0 0 0C C=0x90 Operadores de bits ¡Hagamos ejercicios! unsigned char A = 0xB7; unsigned int B = 0x3E17; unsigned int C; /* 1 */ A = A & 0x0F; /* 2 */ C = ( B >> 8) & 0x3F /* 3 */ C = ( B << 3) | ( A & 0x07) /* 4 */ Guardar en C los 4 bits más significativos de A alineados al bit menos significativo. /* 5 */ Guardar en C de los bits 4 al 15 de B alineados al bit menos significativo. Extracción de campos de bits: Máscaras Una máscara (mask) es un valor constante que en conjunto con una operación matemática se utiliza para extraer un campo de bits. /* Ejemplo */ /*Extraer los 4 bits más significativos*/ unsigned char A = 0xE7; C = A & 0xF0; 1 1 1 0 0 1 1 1A 01234567 1 1 1 0 0 0 0 0C 1 1 1 1 0 0 0 0Máscara C=0xE0 Extracción de campos de bits: Máscaras Una máscara (mask) es un valor constante que en conjunto con una operación matemática se utiliza para extraer un campo de bits. /* Ejemplo */ /*Extraer los 4 bits más significativos*/ unsigned char A = 0xE7; C = A & 0xF0; 1 1 1 0 0 1 1 1A 01234567 1 1 1 0 0 0 0 0C 1 1 1 1 0 0 0 0Máscara C=0xE0 Extracción de campos de bits: Desplazamiento Los campos extraídos se suelen alinear al bit menos significativo (bit 0) para su uso posterior. /* Ejemplo */ /*Extraer los 4 bits más significativos*/ unsigned char A = 0xE7; C = A >> 4; C = C & 0x0F; 1 1 1 0 0 1 1 1A 01234567 0 0 0 0 1 1 1 0C C=0x0E 1 1 1 10 0 0 0Máscara 0 0 0 0 1 1 1 0C Extracción de campos de bits: Ejercicio Extraer los campos de bits: válido, número de lámpara y corriente utilizando operadores de bits. Corriente (10 bits)Lámpara (5 bits)Válido (1 bit)
Compartir