Je travaille avec un peu d'ancien code VB6 qui va ainsi ...
Dim STATUS As Integer STATUS = -1 If (Not STATUS) Then ' do something Else ' do something else End If
3 Réponses :
true est stocké sous -1 et false sous forme de 0. Toute valeur non nulle est considérée comme vraie. P>
Pour voir pourquoi il est si s'il vous plaît vérifier - http://www.vbforums.com /ShowTthread.php?t=405047 p>
"Toute valeur non nulle est considérée comme vraie" - pourquoi alors ? (55 = true) code> retour
false code>?
Bonne question et j'aimerais connaître la réponse - n'importe qui?
Je ne suis pas sûr à 100% .. Mais dans ce cas, 55 n'est pas converti en valeur BOOL et peut-être que 55 et -1 à renvoyer false. Si vous créez une variable BOOL et assignez 55 à celui-ci, puis comparez, le résultat sera vrai.
Toute valeur non nulle est vraie lorsqu'elle est couléée à Boolean B> (affectation, CBOOL)
@onedaywhen true code> est stocké comme
-1 code> par conséquent
55 = true code> est équivalent à
55 = -1 code> qui est code> ce qui est < code> faux code>
@Roland: Je pense que mon commentaire original était méchant de transmettre, simplement parce que VB6 permet d'écrire un code typé de manière lâche, ne signifie pas que c'est une bonne idée de le faire.
dans VB 6, La raison en est que le type de données true code> a une valeur numérique de -1.
false code> a une valeur numérique de 0. strong> p>
Boolean code> est stocké sous forme d'un entier signé de 16 bits. Par conséquent,
-1 est évalué à 16 1 à Binary (1111111111111111). false code> est 16 0S (0000000000000000). Cela produit la relation qui s'est tenue tout au long de l'évolution de la base:
true = pas faux code>. P>
+1. Il est également utile de savoir que le VB6 pas code> est toujours l'opérateur arithmétique, il n'y a pas d'opérateur distinct logique
non code>. Grâce à la coercition de type, vous pouvez utiliser
pas code> avec des booléens comme s'il s'agissait d'un opérateur logique.
Les raisons sont expliquées plus en détail dans Ce bel article de 2001
Pas vraiment une réponse, mais simplement piquer, j'ai tapé cela dans la fenêtre immédiate, avec ces résultats: (J'ai testé plus de valeurs, mais seulement -1 et 0 avaient quelque chose "Intéressant" continu. Les autres étaient tous vrais / faux / faux.) Donc, empiriquement, je dirais que la comparaison est faite arithmétiquement à moins que vous soyez avec CBOOL. Pourquoi? Je ne peux pas vraiment dire ... p> p>
Merci pour ça. Je ne savais pas que vous pourriez faire ce genre de chose dans la fenêtre immédiate. Vos résultats confirment ce que les deux autres affiches ont dit.
L'incapacité d'utiliser la fenêtre immédiate de la même manière que Vb6 me irrite toujours presque tous les jours dans VB.NET.
La vraie question est pourquoi le code d'origine n'utilise-t-il pas un
booléen code> en premier lieu?
@Cody Grey, c'est vraiment une bonne question.
@Cody, @brian Si le code est vraiment ancien, cela peut prédire l'introduction de
booléen code> dans la langue. AFAICR
Boolean code> a été introduit dans VB4.
@MarkJ Ce que vous dites est vrai, mais il y avait des constantes nommées
true code> et
false code> disponible depuis VB1, il est donc donc juste de mauvais code imo.