Título: Operadores de bits Publicado por: david_BS en 4 Abril 2012, 15:51 pm Hola, esto viene a ser una demostración con ejemplos más que un tutorial.
Básicamente vamos a hacer una revisión de todos los operadores de bits del lenguaje C y mostrar su funcionamiento. Citar & AND &= AND Asignativo | OR |= OR Asignativo ^ XOR ^= XOR Asignativo ~ Complemento de Uno << Desplazamiento Izquierdo <<= Desplazamiento Izquierdo Asignativo >> Desplazamiento Derecho >>= Desplazamiento Derecho Asignativo Para mostrar su funcionamiento, pongo ejemplos de este enlace: http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/bitwise.html Sólo que traduje lo que estaba en otro idioma e hice una combinación de todos los ejemplos como para que quede algo entendible. AND - OR - XOR ( requieren dos operandos y hacen comparaciones de bits.) ================================================= AND & copia un bit al resultado si existe en los dos operandos. Código: unsigned int a = 60; /* 60 = 0011 1100 */ OR | copia un bit al resultado si existe en algún operando. Código: unsigned int a = 60; /* 60 = 0011 1100 */ XOR ^ copia un bit al resultado si existe en un operando y no en otro. Código: unsigned int a = 60; /* 60 = 0011 1100 */ Complemento de uno ( es unario (require un operando)) ====================================== NOT ~ tiene el efecto de invertir bits. Código: unsigned int Valor=4; /* 4 = 0000 0100 */ Cambio de bits ============ Los siguientes operadores se usan para desplazar bits a la derecha o izquierda. Código: << ; >> ; <<= ; >>= El valor del operando izquierdo es movido a la derecha o izquierda por el número de bits especificado en el operando derecho. Por ejemplo: Código: unsigned int Valor=4; /* 4 = 0000 0100 */ Usualmente, El bit vacío resultante es asignado como cero (padding). Nota: Siempre use variables 'unsigned' con estos operadores para eludir resultados impredecibles. Los usos de enumeran a continuación pero los ejemplos se los dejo para que los busquen en la red, o si los usuarios del foro de C/C++ se animan a poner sus ejemplos personales del uso de estos operadores XD Citar Usos para Operadores de Bits: ===================== - Extraer y borrar valores - Insertar y combinar valores - Intercambiar variables - Reemplazar operaciones aritméticas De todas formas dejo para descargar un proyecto que es parte de esta demostración, y dentro de la carpeta que tiene, hay otra con ejemplos tomados de la web original. Proyecto MSVC++ 6.0 (http://www.mediafire.com/?qdravvtuv9uqj38) Título: Re: Operadores de bits Publicado por: durasno en 4 Abril 2012, 17:44 pm Hola! muy bueno el trabajo q te tomaste, pero hay algo q no me gusta y es cuando decis COPIA. Tal vez quedaria mejor decir(tomamos el AND): pone un 1 cuando los bits estan en 1
Nuevamente muy bueno el aporte, saludos Título: Re: Operadores de bits Publicado por: david_BS en 4 Abril 2012, 22:04 pm claro, pero te digo algo no es que yo hubiera elegido esa palabra sino que en el texto original dice así..
http://www.lix.polytechnique.fr/~liberti/public/computing/prog/c/C/CONCEPT/bitwise.html Citar AND & will copy a bit to the result if it exists in both operands. osea es como decir 'va a copiar' o 'copiará', o en presente 'copia' pero me parece que está bien porque no se refiere en sí a la operación AND, sino a lo que ocurre con esas 3 variables A, B y C, desde el punto de vista del código. Es decir, lo que resulte de comparar A y B 'se copia' al resultado C. Se podía haber usado otra expresión, 'se copia', 'se pasa', 'se translada', 'da como resultado', en fin, porque se refiere más que nada al resultado y no a la operación. Igualmente esto no es ni siquiera un tutorial, y estaría bueno dar más ejemplos del uso de estos operadores. hay comentarios de gente que dice que no son de mucha utilidad, pero no me parece que sea así Título: Re: Operadores de bits Publicado por: durasno en 4 Abril 2012, 22:37 pm Eso de "copiar" puede que en algun tutorial, manual, pagina web etc, este bien; pero cuando se trata el tema operaciones de bit ya sea en Electronica o en Sistemas, ese termino no es el correcto
De todas formas es un buen aporte para aquellos que se inician en C Saludos PD: si es muy importante este tema aunque mas que nada se usa en un nivel de programacion avanzado |