3
我在一些遗留VB代码(.aspx页面中)和遍布我看到这种格式的条件语句的地方工作:If(someVar And 8)= 8那么 - 这是什么意思?
If (someVar And {integer_x}) = {integer_x} Then
我也看到了各种整数,但他们似乎都是2的幂(8,64,256,16384等)。
这段代码做了什么?
我在一些遗留VB代码(.aspx页面中)和遍布我看到这种格式的条件语句的地方工作:If(someVar And 8)= 8那么 - 这是什么意思?
If (someVar And {integer_x}) = {integer_x} Then
我也看到了各种整数,但他们似乎都是2的幂(8,64,256,16384等)。
这段代码做了什么?
这是一个按位检查。这article说这一切。
(但只有链路答案是令人难以接受的,所以......)
当你做位操作,你看一点那是“上”,或者其值为1。如果你看看someVar And 8
,这就是说“一些变种在右侧的位置上是否有第四位”。
8翻译为二进制文件为0001000
。如果someVar
在该位置有1,则逻辑运算符And
将返回0001000
或8.然后检查是否相等。请注意,someVar
仍然可以有其他位。这可能值得9(0001001
),这仍然意味着条件是真实的。
现在,除非这是为了与电子系统的接口或解析原始数据,否则我认为这是一种非常过时的方式,可以用Enum和Flags属性来完成。
让我们快进到今天:
<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
'...
现在好多了.... – Steve
@Steve我想先得到基本答案:) – MPelletier
@MPelletier - 是的,这是一个遗留系统建于90年代后期:) – jbyrd