If (someVar And 8) = 8 Then -- 这是什么意思?
If (someVar And 8) = 8 Then -- what does this mean?
我正在使用一些遗留 VB 代码(.aspx 页面),并且在所有地方我都看到这种格式的条件:
If (someVar And {integer_x}) = {integer_x} Then
而且我见过各种各样的整数,但它们似乎都是 2 的幂(8、64、256、16384 等)。
这段代码有什么作用?
这是按位检查。 article 说明了一切。
(但是 link-only 答案不受欢迎,所以...)
当您进行按位运算时,您会查找 "on" 或值为 1 的位。如果您查找 someVar And 8
,则表示 "does someVar have its 4th bit on from the right at the on position"。
8 在二进制中翻译为 0001000
。如果 someVar
在该位置有一个 1,逻辑运算符 And
将 return 0001000
或 8。然后检查是否相等。请注意 someVar
仍然可以打开其他位。它可能值 9 (0001001
),这仍然意味着条件为真。
现在,除非这是用于与电子系统的接口或解析原始数据,否则我认为这是一种非常过时的方式来执行具有 Flags 属性的 Enum 可以执行的操作。
让我们fast-forward到今天:
<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
'...
我正在使用一些遗留 VB 代码(.aspx 页面),并且在所有地方我都看到这种格式的条件:
If (someVar And {integer_x}) = {integer_x} Then
而且我见过各种各样的整数,但它们似乎都是 2 的幂(8、64、256、16384 等)。
这段代码有什么作用?
这是按位检查。 article 说明了一切。
(但是 link-only 答案不受欢迎,所以...)
当您进行按位运算时,您会查找 "on" 或值为 1 的位。如果您查找 someVar And 8
,则表示 "does someVar have its 4th bit on from the right at the on position"。
8 在二进制中翻译为 0001000
。如果 someVar
在该位置有一个 1,逻辑运算符 And
将 return 0001000
或 8。然后检查是否相等。请注意 someVar
仍然可以打开其他位。它可能值 9 (0001001
),这仍然意味着条件为真。
现在,除非这是用于与电子系统的接口或解析原始数据,否则我认为这是一种非常过时的方式来执行具有 Flags 属性的 Enum 可以执行的操作。
让我们fast-forward到今天:
<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
'...