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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python  (Leído 5,180 veces)
Joe Fraddy

Desconectado Desconectado

Mensajes: 277


Ver Perfil
alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« 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.


En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #1 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


« Última modificación: 20 Febrero 2015, 07:44 am 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: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #2 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).
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #3 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á



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: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #4 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)
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #5 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
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: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #6 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
En línea

engel lex
Moderador Global
***
Desconectado Desconectado

Mensajes: 15.514



Ver Perfil
Re: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #7 en: 21 Febrero 2015, 23:36 pm »

deberías confirmar que "numero" nunca sea menor de 1, si no la pc explota :P
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: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python
« Respuesta #8 en: 22 Febrero 2015, 05:50 am »

Jajaja, ok, es que apenas estoy aprendiendo y se me pasan todavía algunas cosas xD
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
¿un ordenador puede soportar simultaneamente SO a 64 bits y 32 bits??
Windows
Vjuan_ 5 7,405 Último mensaje 30 Septiembre 2012, 21:43 pm
por aklamath
[Python] Alguno se ofrece ;D?
Scripting
ChicoMaravilla 1 1,997 Último mensaje 5 Abril 2011, 05:32 am
por RyogiShiki
[SOLUCIONADO] ¿ Necesario segmento y desplazamiento en 32 bits ?
ASM
lucaslopez0000 0 2,179 Último mensaje 22 Junio 2013, 23:38 pm
por lucaslopez0000
Problema en python [alguno me ayuda??] « 1 2 »
Scripting
Joe Fraddy 13 6,381 Último mensaje 16 Enero 2015, 05:17 am
por Eleкtro
(Ayuda) Programa ensamblado en modo 32 bits no se puede puede ejecutar en 64 bit
ASM
HelloWorldCodigo 6 3,753 Último mensaje 24 Agosto 2015, 00:20 am
por Eternal Idol
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines