Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Joe Fraddy en 19 Febrero 2015, 23:47 pm



Título: máscara de bits
Publicado por: Joe Fraddy en 19 Febrero 2015, 23:47 pm
Alguno entiende la máscara de bits??

Según una máscara de bits es una variable que te ayuda con las operaciones a nivel de bits. Una máscara de bits te ayuda a encender bits específicos, apagar otros, o a recoger datos de qué bits están encendidos o apagados en un entero.

Esas son las instrucciones del ejercicio:

1. Escribí una función controla_bit4 que tome un número entero como entrada.
2. Debe revisar si el cuarto bit, comenzando desde la derecha, está encendido.
3. Si el bit está encendido, tu función debe devolver "on" (¡no mostrarlo!).
4. Si el bit está apagado, tu función debe devolver "off".

Mi código es este:

Código
  1. def controla_bit4(entero):
  2.    mask=0b0100
  3.    onoff=mask & entero
  4.    if onoff > 0:
  5.        print "on"
  6.    else:
  7.        print "off"
  8.  
  9. num=0b1100
  10. print controla_bit4(num)

Pero creo que no logro hacer bien las cosas, al parecer tengo un error lógico


Título: Re: máscara de bits
Publicado por: engel lex en 19 Febrero 2015, 23:51 pm
debe ser el 4to bit, no el tercero, de resto el programa parece estar bien

por otro lado la funcion tiene un error... o imprimes dentro de la funcion o imprimes fuera de la funcion... el ultimo retorna "none" porque porque la funcion no retornó nada para imprimir... no uses print dentro de la funcion, sino return


Título: Re: máscara de bits
Publicado por: Joe Fraddy en 19 Febrero 2015, 23:54 pm
Y eso como lo hago??? no entiendo bien este asunto de encender bits y apagar


Título: Re: máscara de bits
Publicado por: engel lex en 20 Febrero 2015, 00:06 am
dentro de la funcion cambia "print" por "return"

lo de "encender" y "apagar" bits, no lo veas literalmente...

es simplemente colocar 1 o 0 en una posicion... el programa está bien... pero como te dije, estás probando el tercer bit

Código
  1. mask=0b0100#el 1 está en tercera posición, no 4ta

 


Título: Re: máscara de bits
Publicado por: Joe Fraddy en 20 Febrero 2015, 04:00 am
Pues no se si ya esta bien así:

Código
  1. def controla_bit4(entero):
  2.    mask=0b11011
  3.    onoff=mask & entero
  4.    if onoff > 0:
  5.        print "on"
  6.    else:
  7.        print "off"
  8.  
  9. print controla_bit4(0b0)

Me da la consola:

Código:
off
None
None

Pero el ejercicio me es marcado erróneo con el siguiente mensaje:

¡Uy! Probá otra vez. Tu función falla en controla_bit4(0b0). Devuelve "None" en vez de devolver "off".

¿Que podrá estar mal?


Título: Re: máscara de bits
Publicado por: engel lex en 20 Febrero 2015, 04:09 am
primero... repito...

¡Uy! Probá otra vez. Tu función falla en controla_bit4(0b0). Devuelve "None" en vez de devolver "off".

¿Que podrá estar mal?

dentro de la funcion cambia "print" por "return"


segundo...
Citar
1. Escribí una función controla_bit4 que tome un número entero como entrada.
2. Debe revisar si el cuarto bit, comenzando desde la derecha, está encendido.
3. Si el bit está encendido, tu función debe devolver "on" (¡no mostrarlo!).
4. Si el bit está apagado, tu función debe devolver "off".

"and" cuando se usa con binario puedes verlo como multiplicar 1 (1*1 = 1, el resto de combinaciones da 0)

por lo tanto
Código
  1. mask=0b11011

es lo con lo contrario a lo que quieres... y lo que te dije... estás manejando el 3er bit no el 4to...

siento que no me leen -.-


Título: Re: máscara de bits
Publicado por: Joe Fraddy en 20 Febrero 2015, 04:28 am
Listo, cambié por return y modifique mask, y quedó, mi código es el siguiente:

Código
  1. def controla_bit4(entero):
  2.    mask=0b1000
  3.    onoff=mask & entero
  4.    if onoff > 0:
  5.        return "on"
  6.    else:
  7.        return "off"
  8.  
  9. print controla_bit4(0b0)

pero creo que aun no entiendo esto de los bits, hay alguna libro, documentación o paper que pueda leer que me ayude a comprender mejor este asunto de los bits???

Gracias!!!


Título: Re: máscara de bits
Publicado por: engel lex en 20 Febrero 2015, 04:52 am
los bits son los 1 y 0 de la computadora... cada byte tiene 8 bits...

la cosa es que en bit hay 4 operaciones principales AND, OR, NOT y XOR

es meramente lógico  y se refleja en "tabla de verdad"

como es logica, aquí la wiki sobre ello
http://es.wikipedia.org/wiki/Conectiva_l%C3%B3gica (http://es.wikipedia.org/wiki/Conectiva_l%C3%B3gica)

y sobre operadores a nivel de bit
http://es.wikipedia.org/wiki/Operador_a_nivel_de_bits (http://es.wikipedia.org/wiki/Operador_a_nivel_de_bits)