elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Los 10 CVE más críticos (peligrosos) de 2020


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Operadores de bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Operadores de bits  (Leído 3,166 veces)
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Operadores de bits
« 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 */
unsigned int b = 13; /* 13 = 0000 1101 */
unsigned int c = 0;
c = a & b;              /* 12 = 0000 1100 */
   

OR | copia un bit al resultado si existe en algún operando.

Código:
unsigned int a = 60;	/* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
unsigned int c = 0;  
c = a | b;              /* 61 = 0011 1101 */

XOR ^ copia un bit al resultado si existe en un operando y no en otro.

Código:
unsigned int a = 60;	/* 60 = 0011 1100 */
unsigned int b = 13; /* 13 = 0000 1101 */
unsigned int c = 0;
c = a ^ b;              /* 49 = 0011 0001 */



Complemento de uno ( es unario (require un operando))
======================================

NOT ~ tiene el efecto de invertir bits.

Código:
unsigned int Valor=4;          /*   4 = 0000 0100 */
Valor = ~ Valor;               /* 251 = 1111 1011 */



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 */
unsigned int Desplazamiento=2;
Valor = Valor << Desplazamiento;        /* 16 = 0001 0000 */
Valor <<= Desplazamiento;               /* 64 = 0100 0000 */
printf("%d\n", Valor);                  /* Muestra 64     */

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


« Última modificación: 4 Abril 2012, 15:58 pm por david_BS » En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Operadores de bits
« Respuesta #1 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


En línea

Ahorrate una pregunta, lee el man
david_BS

Desconectado Desconectado

Mensajes: 99



Ver Perfil WWW
Re: Operadores de bits
« Respuesta #2 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í
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Operadores de bits
« Respuesta #3 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
En línea

Ahorrate una pregunta, lee el man
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA!!!!! Con operadores de bits..
Java
AngeloX901 2 2,599 Último mensaje 7 Julio 2009, 20:17 pm
por AngeloX901
Operadores con bits - consulta
Programación C/C++
HRSLASH 4 2,585 Último mensaje 6 Noviembre 2012, 17:16 pm
por HRSLASH
Operadores a nivel de bits (lenguaje C). « 1 2 »
Programación C/C++
NOB2014 16 9,394 Último mensaje 21 Marzo 2014, 15:16 pm
por Yoel Alejandro
Operadores de manejo de bits
Java
m@o_614 2 1,540 Último mensaje 16 Enero 2015, 22:38 pm
por ivancea96
Operadores de bits ?? « 1 2 »
Programación C/C++
FKT 10 3,424 Último mensaje 7 Septiembre 2015, 18:09 pm
por FKT
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines