42581


ExcelのVBAで以下のコードを実行すると0と表示されます。  
Trueが1に変換され、2と表示されることを想定していました。  
なぜこのようなことが起きるのでしょうか。

[code]

    Sub test()
        MsgBox (True + 1)  
    End Sub
    
[/code]


CC BY-SA 3.0
2018-03-22T12:13:32.777
42578
2018-04-15T13:50:09.860
19994
question
vba
VBAで、True + 1　が　0　と計算されるのはなぜ？


VBAにおける`True`は数値に変換すると`1`ではなく`-1`となります。そのため`True + 1`は`0`になります。  
なお、`False`は`0`です。


CC BY-SA 3.0
2018-03-22T13:04:00.073
42581
2018-03-22T13:04:00.073
4236
42578
answer


MsgBox (3 And 5) ← 1  
0000000000000011 ← 3  
And  
0000000000000101 ← 5  
↓  
0000000000000001 ← 1  
MsgBox (3 Or 5) ← 7  
0000000000000011 ← 3  
Or  
0000000000000101 ← 5  
↓  
0000000000000111 ← 7  
(Visual)Basic では、２進数の各ビット毎に論理演算を行います。  
すべてのビットがTrue つまり 1111111111111111 は -1 になります。


CC BY-SA 3.0
2018-04-15T13:50:09.860
43269
2018-04-15T13:50:09.860
42578
answer