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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  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] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Operadores de bits ??  (Leído 4,030 veces)
FKT

Desconectado Desconectado

Mensajes: 221



Ver Perfil
Operadores de bits ??
« en: 5 Septiembre 2015, 15:50 pm »

Un byte son 8 bits, 1 bit es 1 o 0, pero como se usan y para que sirven los Operadores de bits



Como se usan estos operadores ??

Lo he leído muchas veces y he echo los ejercicios para practicar en esta página pero no tengo ni idea de lo que hacen.

Aquí un ejemplo que pone con el operador (OR) por ejemplo:

Código
  1. #include <stdio.h>
  2.  
  3. int main(){
  4. printf( "El resultado de la operación 235 | 143 es: %i\n", 235 | 143 );
  5. }
  6.  
  7.  


En línea

Solo hay 10 tipos de personas, las que saben binario y las que no.
engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: Operadores de bits ??
« Respuesta #1 en: 5 Septiembre 2015, 16:48 pm »

uno de los usos basicos en linux es por ejemplo la seguridad de los archivos


1 = lectura (001)
2 = escritura (010)
4 = ejecución (100)

así que

Código
  1. if(seguridad & b001) printf("lectura");
  2. if(seguridad & b010) printf("escritura");
  3. if(seguridad & b100) printf("ejecución")

la cosa es que si el archivo tiene seguridad 3 (b011) es lectura y escritura

podrías usarlo para imprimir los archivos en binario

Código
  1. while(numero > 0){
  2.  if(numero & 1){
  3.    printf("1");
  4.  }else{
  5.    printf("0");
  6.  }
  7.  numero = numero >> 1;
  8. }

se usa para tambien para cifrar archivos... el más simple es el cifrado xor ya que es una operacion reversible (si se hace, al hacerlo nuevamente vuelve a tener el contenido original)

tiene infinitos usos... la cosa es conseguir cuando lo necesitas


En línea

El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.
RockPosts

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Operadores de bits ??
« Respuesta #2 en: 5 Septiembre 2015, 20:26 pm »

En Windows, es muy común usar estos operadores para crear flags. Me explico: Al crear una ventana, tu le tienes que pasar una serie de caracteristicas a dicha ventana (por ejemplo, ¿tendrá borde mi ventana?, ¿será en pantalla completa?, etc). Para pasarle estas propiedades a Windows, se usan los ya mencionados, los Flags (en español banderas)

Agunas propiedades son:
WS_VISIBLE = 10000000000000000000000000000 en binario (Define si una ventana es visible)
WS_VSCROLL= 00000001000000000000000000000 en binario (Define si una ventana tendrá una barra de desplazamiento vertical)

Entonces, si le quieres pasar esos dos parametros juntos a Windows, haces lo siguiente:

WS_VISIBLE | WS_VSCROLL, lo cual dará como resultado:
10000001000000000000000000000

Como ves, hemos conseguido fusionar las dos propiedades en una sin perder información.

Espero que se haya entendido
En línea

FKT

Desconectado Desconectado

Mensajes: 221



Ver Perfil
Re: Operadores de bits ??
« Respuesta #3 en: 5 Septiembre 2015, 20:57 pm »

En Windows, es muy común usar estos operadores para crear flags. Me explico: Al crear una ventana, tu le tienes que pasar una serie de caracteristicas a dicha ventana (por ejemplo, ¿tendrá borde mi ventana?, ¿será en pantalla completa?, etc). Para pasarle estas propiedades a Windows, se usan los ya mencionados, los Flags (en español banderas)

Agunas propiedades son:
WS_VISIBLE = 10000000000000000000000000000 en binario (Define si una ventana es visible)
WS_VSCROLL= 00000001000000000000000000000 en binario (Define si una ventana tendrá una barra de desplazamiento vertical)

Entonces, si le quieres pasar esos dos parametros juntos a Windows, haces lo siguiente:

WS_VISIBLE | WS_VSCROLL, lo cual dará como resultado:
10000001000000000000000000000

Como ves, hemos conseguido fusionar las dos propiedades en una sin perder información.

Espero que se haya entendido


Pero no son dos cosas totalmente diferentes? Es decir no proceso ahora mismo esa información,

 10000000000000000000000000000 es una cosa

y 00000001000000000000000000000 otra, como puede ser que se conviertan en un número binario para los dos?¿
En línea

Solo hay 10 tipos de personas, las que saben binario y las que no.
RockPosts

Desconectado Desconectado

Mensajes: 28


Ver Perfil
Re: Operadores de bits ??
« Respuesta #4 en: 5 Septiembre 2015, 21:58 pm »

Mira, imagínate que asignamos a dos propiedades diferentes dos ID diferentes:
*A la propiedad de que la ventana debe estar en pantalla completa le asignamos la ID 01 (Está en binario)
*A la propiedad de que la ventana tenga bordes le asignamos la ID 10.

Entonces, si le pasamos la propiedad de pantalla completa solamente, le pasaremos 01. Si le pasamos solamente la propiedad de que la ventana tenga bordes, le pasamos 10, y si queremos que tenga ambas propiedades, le pasamos 01 | 10, es decir, 11.

Dicho de otra forma, a cada propiedad le asignamos una posición en una variable. En el caso anterior, solamente caben 2 propiedades como máximo, puesto que solo hay dos posiciones, es decir, 2 bits. A la posicion 1 le asigné la propiedad de pantalla completa, si vale 0, entonces estará en modo ventana y si vale 1 estará en pantalla completa, y lo mismo con la ventana con bordes. Si la segunda posición vale 0, entonces la ventana no tendrá bordes, y viceversa.
En línea

ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Operadores de bits ??
« Respuesta #5 en: 5 Septiembre 2015, 22:46 pm »

Además, si te sirve de algo, los operadores binarios, son eso, para hacer operaciones binarias. Esa es su utilidad obvia y real. Claro que pocas utilidades tiene eso hoy en día. por eso su utilización se suele limitar a lo que comentan engel lex y RockPosts.
En línea

FKT

Desconectado Desconectado

Mensajes: 221



Ver Perfil
Re: Operadores de bits ??
« Respuesta #6 en: 7 Septiembre 2015, 15:55 pm »

Vale... entiendo que se hace así pero no entiendo la lógica...

En línea

Solo hay 10 tipos de personas, las que saben binario y las que no.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Operadores de bits ??
« Respuesta #7 en: 7 Septiembre 2015, 16:22 pm »

Lo interesante de las operaciones binarias AND, OR y NOT, es que trabajan con números como si se tratasen de arreglos de datos niarios (true/false).
Mira este ejemplo:

Código
  1. // [0] = LECTURA, [1] = ESCRITURA, [2] = MODO_BINARIO, [3] = TRUNCAR
  2. char *flags = "0000";
  3. flags[0] = '1'; // LECTURA activado
  4.  
  5. if(flags[0] == '1')
  6.    printf("Modo lectura activado");

Hasta ahí bien, ¿no?

Ahora, imagínate que en vez de necesitar 8 bytes para guardar 4 valores, pudieses guardar 32 valores en solo 4 bytes (32 bits).
Es muy parecido:

Código
  1. // 0b1000 = LECTURA, 0b0100 = ESCRITURA, 0b0010 = MODO_BINARIO, 0b0001 = TRUNCAR
  2. int flags = 0;
  3. flags = flags | 0b1000; // LECTURA activado
  4.  
  5. if(flags & 0b1000 != 0)
  6.    printf("Modo lectura activado");

El resto, ya depende de tu conocimiento de operaciones con números binarios.
En línea

FKT

Desconectado Desconectado

Mensajes: 221



Ver Perfil
Re: Operadores de bits ??
« Respuesta #8 en: 7 Septiembre 2015, 16:58 pm »

Mmmm no, lo siento.

Voy ha preguntarte algunas cosas que no se que son y así seguramente entenderé el código:

Por ejemplo:
Código
  1. char *flags = "0000";

Que significa "*flags  y porque le pones un asterico , también he visto que en algunos " char " pones un asterisco también por qué?
Código
  1. *char
O aveces con dos "**".

Porque pones los "[]" en un flag?, por intuición creo que es un array...
 
y en el array pones entre comas el 1 por ejemplo " '1' ".
En línea

Solo hay 10 tipos de personas, las que saben binario y las que no.
ivancea96


Desconectado Desconectado

Mensajes: 3.412


ASMático


Ver Perfil WWW
Re: Operadores de bits ??
« Respuesta #9 en: 7 Septiembre 2015, 17:06 pm »

Aun andas muy verde en C xD
* es un puntero. char* es un puntero a char.

"abc" es una cadena de char (char*).
'a' es un char.

flags[0] es el char de índice 0. Para asignarle un valor, le pongo '1' (el caracter '1', 49 en ascii)

No usarás operadores a nivel de bit hasta que avances más en C, así que si aun no lo comprendes bien, no hay problema en que lo dejes para más adelante.
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
AYUDA!!!!! Con operadores de bits..
Java
AngeloX901 2 2,725 Último mensaje 7 Julio 2009, 20:17 pm
por AngeloX901
Operadores de bits
Programación C/C++
david_BS 3 3,416 Último mensaje 4 Abril 2012, 22:37 pm
por durasno
Operadores con bits - consulta
Programación C/C++
HRSLASH 4 2,822 Ú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 10,256 Último mensaje 21 Marzo 2014, 15:16 pm
por Yoel Alejandro
Operadores de manejo de bits
Java
m@o_614 2 1,673 Último mensaje 16 Enero 2015, 22:38 pm
por ivancea96
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines