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.
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
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.
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).
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á
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)
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
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
deberías confirmar que "numero" nunca sea menor de 1, si no la pc explota :P
Jajaja, ok, es que apenas estoy aprendiendo y se me pasan todavía algunas cosas xD