La representación binaria de False
es 0000000000000000
(cuántos bits se utilizan depende de la implementación). Si realiza una operación NOT binaria, se cambiará a 1111111111111111
, es decir, True
, pero esta es la representación binaria del entero con signo -1
.
Un bit de 1
en la posición más significativa indica un número negativo para los números con signo. Cambiar el signo de un número sucede invirtiendo todos los bits y agregando 1. Esto se llama Two's complement.
Cambiemos el signo de 1111111111111111
. Primero invertir; obtenemos: 0000000000000000
Entonces tuya: 0000000000000001
, esto es 1
.
Esta es la prueba de que 1111111111111111
era la representación binaria de -1
.
ACTUALIZACIÓN
Además, al comparar estos valores no se pueden comparar
x = -1
o
x = 1
lugar, se comparan
x <> 0
esto siempre da el resultado correcto, independientemente de la convención utilizada. La mayoría de las implementaciones tratan cualquier valor cero desigual como True
.
posible duplicado de [Casting a boolean to an integer returns -1 for true?] (Http://stackoverflow.com/questions/3621037/casting-a-boolean-to-an-integer-returns-1-for -ver) – dsolimano
Constante Booleana Verdadero tiene valor numérico -1. Esto se debe a que el tipo de datos Boolean se almacena como un entero con signo de 16 bits. En este constructo, -1 evalúa 16 binarios 1 (el valor booleano es verdadero) y 0 como 16 0 s (el valor booleano es falso). Esto es evidente cuando se realiza una operación Not en un valor entero con signo de 16 bits 0 que devolverá el valor entero -1, en otras palabras, True = Not False. Esta funcionalidad se vuelve especialmente útil cuando se realizan operaciones lógicas en los bits individuales de un entero como Y, O, X o No. [7] Esta definición de True también es consistente con BASIC ... –
(Del artículo de Wikipedia aquí http: // es.wikipedia.org/wiki/Visual_Basic) –