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