11
votes

Quelles sont les valeurs entières de Boolean False et Vrai dans VB6?

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

vb6

4 commentaires

La vraie question est pourquoi le code d'origine n'utilise-t-il pas un booléen 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 dans la langue. AFAICR Boolean a été introduit dans VB4.


@MarkJ Ce que vous dites est vrai, mais il y avait des constantes nommées true et false disponible depuis VB1, il est donc donc juste de mauvais code imo.


3 Réponses :


13
votes

true est stocké sous -1 et false sous forme de 0. Toute valeur non nulle est considérée comme vraie.

Pour voir pourquoi il est si s'il vous plaît vérifier - http://www.vbforums.com /ShowTthread.php?t=405047


6 commentaires

"Toute valeur non nulle est considérée comme vraie" - pourquoi alors ? (55 = true) retour false ?


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 (affectation, CBOOL)


@onedaywhen true est stocké comme -1 par conséquent 55 = true est équivalent à 55 = -1 qui est ce qui est < code> faux


@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.



10
votes

dans VB 6, true a une valeur numérique de -1. false a une valeur numérique de 0.

La raison en est que le type de données Boolean est stocké sous forme d'un entier signé de 16 bits. Par conséquent,
-1 est évalué à 16 1 à Binary (1111111111111111). false est 16 0S (0000000000000000). Cela produit la relation qui s'est tenue tout au long de l'évolution de la base: true = pas faux .


2 commentaires

+1. Il est également utile de savoir que le VB6 pas est toujours l'opérateur arithmétique, il n'y a pas d'opérateur distinct logique non . Grâce à la coercition de type, vous pouvez utiliser pas 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



3
votes

Pas vraiment une réponse, mais simplement piquer, j'ai tapé cela dans la fenêtre immédiate, avec ces résultats: xxx

(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 ...


2 commentaires

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.