utf8 tildes remove eliminar colocar accents python data-conversion tilde

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

  • True se 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)