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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  máscara de bits
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: máscara de bits  (Leído 4,034 veces)
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
máscara de bits
« 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


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



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


« Última modificación: 19 Febrero 2015, 23:53 pm por engel lex » 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.
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: máscara de bits
« Respuesta #2 en: 19 Febrero 2015, 23:54 pm »

Y eso como lo hago??? no entiendo bien este asunto de encender bits y apagar
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: máscara de bits
« Respuesta #3 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

 
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.
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: máscara de bits
« Respuesta #4 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?
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: máscara de bits
« Respuesta #5 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 -.-
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.
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
Re: máscara de bits
« Respuesta #6 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!!!
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: máscara de bits
« Respuesta #7 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

y sobre operadores a nivel de bit
http://es.wikipedia.org/wiki/Operador_a_nivel_de_bits
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.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines