Каковы целочисленные значения логического False и True в VB6? - PullRequest
10 голосов
/ 25 ноября 2010

Я работаю с небольшим количеством старого кода VB6, который выглядит следующим образом ...

Dim STATUS As Integer

STATUS = -1

If (Not STATUS) Then
' do something
Else
' do something else
End If

, поэтому мне, естественно, было интересно, какая ветвь этого кода выполняется.Так кто-нибудь знает, что числовые значения True и False в VB6?

Ответы [ 3 ]

11 голосов
/ 25 ноября 2010

True хранится как -1, а false как 0. Любое ненулевое значение считается истинным.

Чтобы понять, почему это так, проверьте - http://www.vbforums.com/showthread.php?t=405047

10 голосов
/ 25 ноября 2010

В VB 6 True имеет числовое значение -1. False имеет числовое значение 0.

Причина этого в том, что тип данных Boolean хранится в виде 16-разрядного целого числа со знаком. Следовательно,
-1 соответствует 16 1 с в двоичном формате (1111111111111111). False равно 16 0 (0000000000000000). Это создает отношения, которые поддерживались на протяжении всей эволюции Бейсика: True = Not False.

3 голосов
/ 01 декабря 2010

На самом деле не ответ, но просто поразмыслив, я набрал это в ближайшем окне, с такими результатами:

For x = -5 To 5 : ? x, CBool(x), ( x = True ), ( x = False ) : Next x
-5            True          False         False
-4            True          False         False
-3            True          False         False
-2            True          False         False
-1            True          True          False
 0            False         False         True
 1            True          False         False
 2            True          False         False
 3            True          False         False
 4            True          False         False
 5            True          False         False

(я проверял больше значений, но только -1 и 0 имели что-то "интересное"продолжается. Все остальные были Истинными / Ложными / Ложными.) Таким образом, эмпирически, я бы сказал, что сравнение выполняется арифметически, если вы не используете CBool.Зачем?Я не могу сказать ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...