[Python] Duda de Operadores a nivel bit [Not(~)]

Iniciado por evocal, 24 Noviembre 2012, 20:56 PM

0 Miembros y 1 Visitante están viendo este tema.

evocal

Buenas, estoy metiendome en el mundo de Python y ahora mismo estaba llegando a la parte de Operadores a nivel de bit. Pero me ha surgido un problema:

En el comando Not (~) yo entiendo que los numeros cambian segun sea en binario, por ejemplo:

~4 (100) segun lo que entiendo yo pasaria a  3(011), sin embargo me pasa a -5

Ya de por si me descoloca que me salga un numero negativo, pero no le encuentro sentido que 4 (100) pase a 5(101)

¿Alguien me puede explicar el error que cometo o realmente como es el comando not?

Saludos

Danyfirex

Creo que esto te responderá porque lo que estas haciendo es una operacion bit a bit.
cito a wikipedia.

CitarNOT
A   NOT A
0   1
1   0
El NOT bit a bit, o bitwise, o complemento, es una operación unaria que realiza la negación lógica en cada bit, invirtiendo los bits del número, de tal manera que los ceros se convierten en 1 y viceversa. Por ejemplo:
NOT 10011
  = 01100
El NOT forma el complemento a uno de un valor binario dado.
En un número entero con signo en complemento a dos, el NOT da como resultado el inverso aditivo del número menos 1, es decir NOT x = -x - 1. Para obtener el complemento a dos de un número, se debe sumar 1 al resultado, dando el negativo del número. Esto equivale a un cambio de signo del número: +5 se convierte en -5, y -5 se convierte en +5.
Para los enteros sin signo, el complemento bit a bit es la "reflexión de espejo" del número a través del punto medio del rango del entero. Por ejemplo, para los enteros sin signo de 8 bits, NOT x = 255 - x, para los enteros sin signo de 16 bits, NOT x = 65535 - x, y en general, para los enteros sin signo de n bits, NOT x = (2n - 1) - x.


Saludos