将两个数字转换为布尔值?
问题描述:
有人可以向我解释如何在这里和两个数字相结合吗?为什么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)
答
参见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
答
如果您有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
答
它正在做一个按位 - 和我和j,然后转换为布尔 - 非零是真实的。
1和3→01和11个二进制→01因此非零。
1和2→01和10个二进制→00因此为零因此为假
vb6是的。不是c#或vb.net – user3542679
这个*有*为VB.NET。在VB 6中没有Console.WriteLine。 –