2017-09-26 67 views
-2

有人可以向我解释如何在这里和两个数字相结合吗?为什么j=3返回true,但j=2返回false?将两个数字转换为布尔值?

dim jak as Boolean 
dim i as Integer 
dim j as Integer 

i = 1 
j = 3 
jak = j And i 
Console.WriteLine("Hello, world!" & jak) 
+0

vb6是的。不是c#或vb.net – user3542679

+3

这个*有*为VB.NET。在VB 6中没有Console.WriteLine。 –

回答

3

参见The Microsoft documentation on the AND operator。当操作数是数字而不是布尔值时,AND执行按位AND,而不是严格逻辑AND,正如操作数为布尔值时一样。

1 = 0 0 0 0 0 0 0 1 
2 = 0 0 0 0 0 0 1 0 
3 = 0 0 0 0 0 0 1 1 

1 AND 2 = 0 0 0 0 0 0 0 0 = FALSE, when converted to boolean 
1 AND 3 = 0 0 0 0 0 0 0 1 = TRUE, when converted to boolean 
2

如果您有Option Strict On,则不会出现此问题。它会告诉你,将整数转换为布尔值是一个问题。但如果没有它,VB会将所有内容都转换为True,除非为0,否则为false。

Console.WriteLine(CBool(-2)) ' True 
    Console.WriteLine(CBool(-1)) ' True 
    Console.WriteLine(CBool(0)) ' False 
    Console.WriteLine(CBool(1)) ' True 
    Console.WriteLine(CBool(2)) ' True 
    Console.WriteLine(CBool(3)) ' True 

3和1 = 1,然后将其转化为True

0

它正在做一个按位 - 和我和j,然后转换为布尔 - 非零是真实的。

1和3→01和11个二进制→01因此非零。

1和2→01和10个二进制→00因此为零因此为假