La rappresentazione binaria di False
è 0000000000000000
(il numero di bit utilizzati dipende dall'implementazione). Se si esegue un'operazione binaria NOT su di esso, verrà modificato in 1111111111111111
, ad esempio True
, ma questa è la rappresentazione binaria dell'intero con segno -1
.
Un bit di 1
nella posizione più significativa segnala un numero negativo per i numeri firmati. La modifica del segno di un numero avviene invertendo tutti i bit e aggiungendo 1. Questo è chiamato Two's complement.
Cambiamo il segno di 1111111111111111
. Primo invertito; otteniamo: 0000000000000000
Quindi aggiungere uno: 0000000000000001
, questo è 1
.
Questa è la prova che 1111111111111111
era la rappresentazione binaria di -1
.
UPDATE
Inoltre, quando si confrontano questi valori non confrontare
x = -1
o
x = 1
invece, fare confrontare
x <> 0
questo dà sempre il risultato corretto, indipendentemente dalla convenzione utilizzata. La maggior parte delle implementazioni considera qualsiasi valore diverso da zero come True
.
fonte
2012-01-11 22:27:45
possibile duplicato di [Lanciare un valore booleano a un intero restituisce -1 per vero?] (Http://stackoverflow.com/questions/3621037/casting-a-boolean-to-an-integer-returns-1-for -true) – dsolimano
Costante booleana True ha un valore numerico -1. Questo perché il tipo di dati booleano è memorizzato come un intero con segno a 16 bit. In questo costrutto -1 restituisce 16 binari 1s (il valore booleano True) e 0 come 16 0s (il valore booleano False). Ciò risulta evidente quando si esegue un'operazione Not su un valore intero con segno a 16 bit 0 che restituirà il valore intero -1, in altre parole True = Not False. Questa funzionalità diventa particolarmente utile quando si eseguono operazioni logiche sui singoli bit di un numero intero come And, Or, Xor e Not. [7] Questa definizione di True è anche coerente con BASIC ... –
(Dall'articolo di Wikipedia qui http: // en.wikipedia.org/wiki/Visual_Basic) –