gpt4 book ai didi

vb.net - If (someVar And 8) = 8 Then -- 这是什么意思?

转载 作者:行者123 更新时间:2023-12-01 08:51:02 25 4
gpt4 key购买 nike

我正在使用一些遗留的 VB 代码(.aspx 页面),并且到处都可以看到这种格式的条件:

If (someVar And {integer_x}) = {integer_x} Then

我见过各种各样的整数,但它们似乎都是 2 的幂(8、64、256、16384 等)。

这段代码有什么作用?

最佳答案

这是按位检查。这个article说明一切。

(但仅链接的答案不受欢迎,所以...)

当您进行按位运算时,您会查找“on”或值为 1 的位。如果您查找 someVar And 8,则表示“someVar 的第 4 位是否开启从右侧在 on 位置"。

8 将二进制转换为 0001000。如果 someVar 在该位置有 1,则逻辑运算符 And 将返回 0001000 或 8。然后检查是否相等。请注意,someVar 仍然可以打开其他位。它可能值 9 (0001001),这仍然意味着条件为真。

现在,除非这是用于与电子系统的接口(interface)或解析原始数据,否则我会说这是一种非常过时的方式来执行带有 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
'...

关于vb.net - If (someVar And 8) = 8 Then -- 这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42146359/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com