web-dev-qa-db-ja.com

VB6のブールFalseとTrueの整数値は何ですか?

私はこのように行く少し古いVB6コードで働いています...

Dim STATUS As Integer

STATUS = -1

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

ですから、当然、このコードのどのブランチが実行されるのか疑問に思いました。では、VB6のTrueとFalseの数値を知っている人はいますか?

10
Brian Hooper

Trueは-1として格納され、falseは0として格納されます。ゼロ以外の値はすべてtrueと見なされます。

その理由を確認するには、 http://www.vbforums.com/showthread.php?t=405047 を確認してください。

11

In VB 6、Trueの数値は-1です。Falseの数値は0です。

これは、Booleanデータ型が16ビットの符号付き整数として格納されているためです。したがって、
-1は、バイナリ(1111111111111111)で161に評価されます。 Falseは160(0000000000000000)です。これにより、BASICの進化を通じて維持されてきた関係が生まれます。True = Not False

10
Cody Gray

実際には答えではありませんが、ちょっと突っ込んで、これをすぐにウィンドウに入力すると、次の結果が得られます。

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​​。どうして?本当に言えない….

3
JeffK