我正在处理一些遗留的VB代码(.aspx页面),并且我看到了这种格式的条件:
If (someVar And {integer_x}) = {integer_x} Then
我已经看过各种整数,但它们似乎都是2的幂(8,64,256,16384等)。
这段代码有什么作用?
答案 0 :(得分:9)
这是一个按位检查。这article说明了一切。
(但仅链接答案令人不悦,所以......)
当你进行按位运算时,你会找到一个“开”的位,或者值为1.如果你找someVar And 8
,那就是说“某些值的第四位是否从右边开始在位置“。
8将二进制翻译为0001000
。如果someVar
在该位置有1,则逻辑运算符And
将返回0001000
或8.然后检查是否相等。请注意,someVar
仍然可以包含其他位。它可能值9(0001001
),这仍然意味着条件成立。
现在,除非这是针对具有电子系统的接口或解析原始数据,否则我会说这是使用Flags属性执行Enum的一种非常过时的方式。
让我们快进到今天:
<Flags()> _
Enum PizzaToppings
Sauce = 1
Pepperoni = 2
Mushrooms = 4
Peppers = 8
Bacon = 16
Ham = 32
Cheese = 64
Pineapple = 128
End Enum
'...
Dim myToppings As PizzaToppings = PizzaToppings.Sauce Or PizzaToppings.Cheese 'Use Or to combine or +
'...
If myToppings.HasFlag(PizzaToppings.Sauce) Then
addSauce()
End If
如果你不想打扰权力,你也可以做一点转变:
1 << 0 is 2^0 is 1
1 << 1 is 2^1 is 2
1 << 2 is 2^2 is 4
1 << 3 is 2^3 is 8
因此:
Enum PizzaToppings
Sauce = 1 << 0
Pepperoni = 1 << 1
'...