私はこのように行く少し古いVB6コードで働いています...
Dim STATUS As Integer
STATUS = -1
If (Not STATUS) Then
' do something
Else
' do something else
End If
ですから、当然、このコードのどのブランチが実行されるのか疑問に思いました。では、VB6のTrueとFalseの数値を知っている人はいますか?
Trueは-1として格納され、falseは0として格納されます。ゼロ以外の値はすべてtrueと見なされます。
その理由を確認するには、 http://www.vbforums.com/showthread.php?t=405047 を確認してください。
In VB 6、True
の数値は-1です。False
の数値は0です。
これは、Boolean
データ型が16ビットの符号付き整数として格納されているためです。したがって、
-1は、バイナリ(1111111111111111)で161に評価されます。 False
は160(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。どうして?本当に言えない….