web-dev-qa-db-fra.com

Pourquoi "Oui" a une valeur de -1 dans la base de données MS Access?

Je regarde les données liées dans MS Access.

Les champs "Oui/Non" contiennent la valeur -1 pour OUI et 0 pour NON. Quelqu'un peut-il expliquer pourquoi une telle valeur contre-intuitive est utilisée pour "Oui"? (Évidemment, cela devrait être 1 et 0)

J'imagine qu'il doit y avoir une bonne raison, et j'aimerais le savoir.

44
Supermitch

La représentation binaire de False est 0000000000000000 (le nombre de bits utilisés dépend de l'implémentation). Si vous effectuez une opération NON binaire dessus, elle sera remplacée par 1111111111111111, c'est-à-dire True, mais il s'agit de la représentation binaire de l'entier signé -1.

Un peu de 1 à la position la plus significative signale un nombre négatif pour les nombres signés. Changer le signe d'un nombre se produit en inversant tous les bits et en ajoutant 1. Cela s'appelle le complément à deux .

Changeons le signe de 1111111111111111. Première inversion; on a: 0000000000000000

Ajoutez-en un: 0000000000000001, c'est 1.

Ceci est la preuve que 1111111111111111 était la représentation binaire de -1.


[~ # ~] mise à jour [~ # ~]

De plus, lorsque vous comparez ces valeurs, ne comparez pas

x = -1

ou

x = 1

comparez plutôt

x <> 0

cela donne toujours le résultat correct, indépendamment de la convention utilisée. La plupart des implémentations traitent toute valeur égale à zéro comme True.

49