tildes - unicode python
¿Por qué ~ Verdadero resultado en-2? (3)
En la consola de Python:
~True
Me da:
-2
¿Por qué? ¿Puede alguien explicarme este caso en particular en binario?
¿Qué es int(True) ? Es 1 .
1 es:
00000001
y ~1 es:
11111110
Que es -2 en el complemento de Dos 1
1 Voltee todos los bits, agregue 1 al número resultante e interprete el resultado como una representación binaria de la magnitud y agregue un signo negativo (ya que el número comienza con 1):
11111110 → 00000001 → 00000010
↑ ↑
Flip Add 1
Que es 2, pero el signo es negativo ya que el MSB es 1.
Vale la pena mencionar:
Piense en bool , encontrará que es de naturaleza numérica. Tiene dos valores, True y False , y solo son versiones "personalizadas" de los enteros 1 y 0 que solo se imprimen de forma diferente. Son subclases del tipo entero int .
Entonces se comportan exactamente como 1 y 0, excepto que bool redefine str y repr para mostrarlos de manera diferente.
>>> type(True)
<class ''bool''>
>>> isinstance(True, int)
True
>>> True == 1
True
>>> True is 1 # they''re still different objects
False
El tipo de bool Python es una subclase de int (por razones históricas; los booleanos solo se agregaron en Python 2.3).
Como int(True) es 1 , ~True es ~1 es -2 .
Ver PEP 285 para por qué bool es una subclase de int .
Si quería el booleano inverso, use not :
>>> not True
False
>>> not False
True
Si quisieras saber por qué ~1 es -2 , es porque estás invirtiendo todos los bits en un entero con signo; 00000001 convierte en 1111110 que en un número entero con signo es un número negativo, ver Complemento de dos :
>>> # Python 3
...
>>> import struct
>>> format(struct.pack(''b'', 1)[0], ''08b'')
''00000001''
>>> format(struct.pack(''b'', ~1)[0], ''08b'')
''11111110''
donde el 1 bit inicial significa que el valor es negativo, y el resto de los bits codifican el inverso del número positivo menos uno.
~True == -2 no es sorprendente si True significa 1 y ~ significa inversión en modo bit ...
... siempre que
-
Truese puede tratar como un entero y - los números enteros están representados en complemento a Dos
Ediciones:
- se corrigió la mezcla entre la representación entera y el operador de inversión bit a bit
- aplicado otro pulido (cuanto más corto es el mensaje, más trabajo se necesita)