Autor
|
Tema: alguno puede ayudarme con el desplazamiento y posicionamiento de bits en python (Leído 5,513 veces)
|
Joe Fraddy
Desconectado
Mensajes: 277
|
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: 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.
|
|
|
En línea
|
|
|
|
engel lex
|
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 numero^n
(no confundir "^" con potencia, potencia en python se representa con "**") te recomiendo para el nth bit lo hagas con desplazamiento mascara = 1<<(bit_escogido -1)
es decir, el 4to bit sería bit_escogido = 4 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
Mensajes: 277
|
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. 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. Instrucciones1. 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
|
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
Mensajes: 277
|
Creo que sigo sin entender, porque lo hago así y no me resulta: def invierte_bit(numero, n): resultado = 1<<(n -1) return bin(resultado) num=2 x=0b111 print invierte_bit(num,x)
|
|
|
En línea
|
|
|
|
engel lex
|
no da resultado porque no usaste "numero" dentro de la función 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
Mensajes: 277
|
Gracias por las recomendaciones, ya quedó el código: 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
|
|
|
En línea
|
|
|
|
engel lex
|
deberías confirmar que "numero" nunca sea menor de 1, si no la pc explota
|
|
|
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
Mensajes: 277
|
Jajaja, ok, es que apenas estoy aprendiendo y se me pasan todavía algunas cosas xD
|
|
|
En línea
|
|
|
|
|
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,671
|
30 Septiembre 2012, 21:43 pm
por aklamath
|
|
|
[Python] Alguno se ofrece ;D?
Scripting
|
ChicoMaravilla
|
1
|
2,192
|
5 Abril 2011, 05:32 am
por RyogiShiki
|
|
|
[SOLUCIONADO] ¿ Necesario segmento y desplazamiento en 32 bits ?
ASM
|
lucaslopez0000
|
0
|
2,304
|
22 Junio 2013, 23:38 pm
por lucaslopez0000
|
|
|
Problema en python [alguno me ayuda??]
« 1 2 »
Scripting
|
Joe Fraddy
|
13
|
6,979
|
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
|
4,055
|
24 Agosto 2015, 00:20 am
por Eternal Idol
|
|