máscara de bits

Iniciado por Joe Fraddy, 19 Febrero 2015, 23:47 PM

0 Miembros y 1 Visitante están viendo este tema.

Joe Fraddy

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 (python) [Seleccionar]
def controla_bit4(entero):
    mask=0b0100
    onoff=mask & entero
    if onoff > 0:
        print "on"
    else:
        print "off"
   
num=0b1100
print controla_bit4(num)


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

engel lex

#1
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
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

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

engel lex

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 (python) [Seleccionar]
mask=0b0100#el 1 está en tercera posición, no 4ta

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

Pues no se si ya esta bien así:

Código (python) [Seleccionar]
def controla_bit4(entero):
    mask=0b11011
    onoff=mask & entero
    if onoff > 0:
        print "on"
    else:
        print "off"

print controla_bit4(0b0)


Me da la consola:

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?

engel lex

primero... repito...

Cita de: Joe Fraddy en 20 Febrero 2015, 04:00 AM¡Uy! Probá otra vez. Tu función falla en controla_bit4(0b0). Devuelve "None" en vez de devolver "off".

¿Que podrá estar mal?

Cita de: engel lex en 20 Febrero 2015, 00:06 AMdentro de la funcion cambia "print" por "return"


segundo...
Citar1. 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 (python) [Seleccionar]
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 -.-
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

Listo, cambié por return y modifique mask, y quedó, mi código es el siguiente:

Código (python) [Seleccionar]
def controla_bit4(entero):
    mask=0b1000
    onoff=mask & entero
    if onoff > 0:
        return "on"
    else:
        return "off"

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!!!

engel lex

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