Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Bitwise operator

Estas en el tema de Bitwise operator en el foro de C/C++ en Foros del Web. Amigos tengo una duda, sobre para que realmente se utiliza el bitwise, la verdad NUNCA he entendido el verdadero uso de esto, si, se utiliza ...
  #1 (permalink)  
Antiguo 10/11/2010, 09:44
 
Fecha de Ingreso: marzo-2010
Mensajes: 34
Antigüedad: 14 años, 1 mes
Puntos: 0
Bitwise operator

Amigos tengo una duda, sobre para que realmente se utiliza el bitwise, la verdad NUNCA he entendido el verdadero uso de esto, si, se utiliza para la manipulacion de bits... pero para que querria yo eso? por que me seria de utilidad?

public:
int lex();
void nuevo_input(string in);
AlalisisLexico(string in = "");
virtual ~AnalisisLexico();

aca un ejemplo en C++, ni siquiera entiendo :S
  #2 (permalink)  
Antiguo 10/11/2010, 11:30
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Bitwise operator

¿bitwise? ¿te referís al "ñoqui" (~)? (nombre oficial virguilla)
No confundas usos, si bien es el operador NOT cuando se aplica a un valor, aquí no está aplicado a un valor sino a un método.

En C++ indica que la función es un destructor (se llamará a la hora de destruir el objeto, y debería encargarse de liberar los recursos que éste posea)
  #3 (permalink)  
Antiguo 10/11/2010, 11:31
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 4 meses
Puntos: 57
Respuesta: Bitwise operator

http://en.wikipedia.org/wiki/Bitwise_operation

Hay ocasiones en donde necesitas trabajar con bits en lugar de bytes completos. Por ejemplo al recibir algun mensaje de windows o el valor regresado en algun protocolo (ftp,IRC, etc.)

Por ejemplo, supon que tienes un byte en donde el bit 1 significa si hubo error, los bits 2 y 3 contienen el codigo de error y los bits restantes (4,5,6,7,8) contienen la linea donde se produjo el error.

Si todo esta en 0 significa que no hubo error, entonces podrias hacer una simple comparacion:
Código C:
Ver original
  1. if (valorDevuelto > 0) //entonces hubo error
Pero en caso de que haya error, no podrias hacer una comparacion de ese tipo para saber cual fue el tipo de error y cual fue el numero de linea. Es ahi en donde utilizas los operadores a nivel de bits.

Código C:
Ver original
  1. // 8 7 6 5 4 3 2 1 #bit
  2. // 1 0 1 0 1 1 1 1 valorDevuelto
  3. if ( valorDevuelto & 1 ) { //AND a primer bit. Es 1 (verdadero) si hubo error
  4.   char codError = valorDevuelto & 6; //AND con bits 2 y 3 (00000110 binario)
  5.   //codError valdria 6, pero en realidad el codigo de error son los bits 2 y 3
  6.   //asi que el bit de la derecha sale sobrando. Aqui se recorren los bits
  7.   // un lugar a la dereccha
  8.   codError = codError >> 1;
  9.  
  10.   //ahora se deben comparar los bits 4,5,6,7,8
  11.   char lineaError = valorDevuelto & 248; //248 = 11111000 binario
  12.   //de nuevo los bits de la derecha salen sobrando asi que se recorren los bits
  13.   lineaError = lineaError >> 3;
  14. }
Esto es un ejemplo con un solo byte, pero la mayor parte de las veces se utilizan 32 bits.

Recorrer los bits tambien se utiliza para optimizar algunas operaciones. Mover los bits es mas rapido que hacer multiplicaciones o divisiones. Recorrer los bits hacia la izquierda hace que el valor se multiplique por potencias de 2.
Recorrer 1 bits a la izquierda, multiplica por 2
Recorrer 2 bits a la izquierda, multiplica por 4
Recorrer 3 bits a la izquierda, multiplica por 8

Recorrer bits a la derecha divide por potencias de 2.
Esta tecnica se utiliza mayormente en aplicaciones donde hay muchas operaciones aritmeticas, como la programacion grafica.
  #4 (permalink)  
Antiguo 10/11/2010, 11:36
 
Fecha de Ingreso: marzo-2010
Mensajes: 34
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: Bitwise operator

Wao!, gracias a ambos por sus respectivas respuestas, y por su tiempo, la verdad que me han servido de mucho, les debo una ;)

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:10.