Foro de elhacker.net

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
  1. def invierte_bit(numero, n):
  2.    resultado=numero<<n
  3.    return bin(resultado)
  4.  
  5. nth=0b10
  6. bit=2
  7. 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
  1. numero^n
(no confundir "^" con potencia, potencia en python se representa con "**")

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

es decir, el 4to bit sería
Código
  1. bit_escogido = 4
  2. 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
  1. a = 0b101
  2. # mascara diez bits
  3. mascara = (0b1 << 9)  # Uno menos que diez
  4. 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
  1. def invierte_bit(numero, n):
  2.    resultado = 1<<(n -1)
  3.    return bin(resultado)
  4. num=2
  5. x=0b111
  6.  
  7. 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
  1. def invierte_bit(numero, n):
  2.    mask = (0b1<<n-1)
  3.    resultado = numero ^ mask
  4.    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