Test Foro de elhacker.net SMF 2.1

Programación => Scripting => Mensaje iniciado por: Joe Fraddy en 20 Febrero 2015, 06:24 AM

Título: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: Joe Fraddy en 20 Febrero 2015, 06:24 AM
Lo que tengo que hacer es:

01 Vamos a crear una función invierte_bit que tome los datos de entrada (numero, n).
02 Invertimos el nth bit (con los bit de unos siendo el primer bit) y lo guardamos en resultado.
03Return the result of calling bin(result).

y tengo este código:

Código (python) [Seleccionar]
def invierte_bit(numero, n):
    resultado=numero<<n
    return bin(resultado)

nth=0b10
bit=2
print invierte_bit(nth, bit)


Pero me parece que esta mal, porque no es solo un error lógico sino de comprensión.
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: engel lex en 20 Febrero 2015, 06:35 AM
no estoy seguro de entender...

lo que te piden es invertir el bit(si es 1 lo convierte en 0 y viceversa) escogido a un numero ingresado?

porque lo que estás haciendo es desplazamiento de bits, en tal caso necesitas es invertir...

lo puedes hacer con XOR ya que si es 1 al hacer XOR 1 da 0 y si es 0 XOR 1 da 1


en tal caso procedimiento es
Código (python) [Seleccionar]
numero^n
(no confundir "^" con potencia, potencia en python se representa con "**")

te recomiendo para el nth bit lo hagas con desplazamiento
Código (python) [Seleccionar]
mascara = 1<<(bit_escogido -1)

es decir, el 4to bit sería
Código (python) [Seleccionar]
bit_escogido = 4
mascara = 1<<(bit_escogido -1)

máscara sería igual que 0b1000
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: Joe Fraddy en 20 Febrero 2015, 20:33 PM
No aun no logro entender:

Esta es la clase:

Posicionate y desplazate
Finalmente, también podés utilizar los operadores a nivel de bits de desplazamiento a la izquierda (<<) y a la derecha (>>) para desplazar máscaras a la posición correspondiente.

Código (python) [Seleccionar]
a = 0b101
# mascara diez bits
mascara = (0b1 << 9)  # Uno menos que diez
deseado = a ^ mascara


Supongamos que quiero encender el décimo bit, comenzando desde la derecha de un entero a.

En lugar de ingresar toda la serie numérica, puedo desplazarme utilizando el operador <<.

Utilizamos el 9, porque solamente necesitamos desplazar la máscara nueve lugares, comenzando desde la derecha, para llegar al décimo bit.

Instrucciones
1. Vamos a crear una función invierte_bit que tome los datos de entrada (numero, n).
2. Invertimos el nth bit (con los bit de unos siendo el primer bit) y lo guardamos en resultado.
3. Devolver el resultado llamando a bin(resultado).
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: engel lex en 20 Febrero 2015, 20:39 PM
si... teoricamente es así..., para la mascara no es necesario que escribas "0b1" ya que 1 es 1 en binario, octal, decimal, hexadecimal, etc... 1 es 1


si quieres encender con OR siempre servirá



Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: Joe Fraddy en 20 Febrero 2015, 21:19 PM
Creo que sigo sin entender, porque lo hago así y no me resulta:

Código (python) [Seleccionar]
def invierte_bit(numero, n):
    resultado = 1<<(n -1)
    return bin(resultado)
num=2
x=0b111

print invierte_bit(num,x)
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: engel lex en 20 Febrero 2015, 21:27 PM
no da resultado porque no usaste "numero" dentro de la función :silbar:

eso pasa porque has pasado mucho tiempo trancado y trabajando eso XD


deja eso de lado por un rato, y ponte a experimentar con codigo, a usar los desplazamientos, los operadores logicos y ve como funcionan bien... leete bien los 2 textos de wikipedia que te deje en el otro post
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: Joe Fraddy en 21 Febrero 2015, 23:17 PM
Gracias por las recomendaciones, ya quedó el código:

Código (python) [Seleccionar]
def invierte_bit(numero, n):
    mask = (0b1<<n-1)
    resultado = numero ^ mask
    return bin(resultado)


Creo que todavía me falta estudiar mas a fondo este asunto de los bits xD
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: engel lex en 21 Febrero 2015, 23:36 PM
deberías confirmar que "numero" nunca sea menor de 1, si no la pc explota :P
Título: Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
Publicado por: Joe Fraddy en 22 Febrero 2015, 05:50 AM
Jajaja, ok, es que apenas estoy aprendiendo y se me pasan todavía algunas cosas xD