Ответ 1
True сохраняется как -1 и false как 0. Любое ненулевое значение считается истинным.
Чтобы понять, почему это так, пожалуйста, проверьте - http://www.vbforums.com/showthread.php?t=405047
Я работаю с небольшим старым кодом VB6, который, таким образом,...
Dim STATUS As Integer
STATUS = -1
If (Not STATUS) Then
' do something
Else
' do something else
End If
поэтому я, естественно, задавался вопросом, какая ветвь этого кода выполнена. Так кто-нибудь знает, что числовые значения True и False находятся в VB6?
True сохраняется как -1 и false как 0. Любое ненулевое значение считается истинным.
Чтобы понять, почему это так, пожалуйста, проверьте - http://www.vbforums.com/showthread.php?t=405047
В VB 6 True
имеет числовое значение -1. False
имеет числовое значение 0.
Причина этого заключается в том, что тип данных Boolean
хранится как 16-разрядное целое число со знаком. Следовательно, значение -1 оценивается до 16 1 в двоичном (1111111111111111). False
составляет 16 0 с (0000000000000000). Это создает взаимосвязь, которая сохранялась в течение эволюции BASIC: True = Not False
.
На самом деле не ответ, а просто выкалывающий, я набрал это в ближайшее окно с этими результатами:
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 имели что-то "интересное". Остальные были все True/False/False.) Итак, эмпирически, я бы сказал, что сравнение выполняется арифметически, если вы бросаете с помощью CBool. Зачем? Я не могу сказать...