Visual Basic:使用OR进行变量赋值

时间:2013-04-17 20:47:32

标签: .net vb.net active-directory bit-manipulation bit

我不明白OR语句在这个代码示例中做了什么。

DE.Properties("UserAccountControl").Value = CInt(DE.Properties("UserAccountControl").Value) Or AccountOptionsEnum.UF_ACCOUNTDISABLE

DE.Properties(“UserAccountControl”)。值表示小数。

枚举是整数。

我知道这是代码用于停用Active Directory中的用户,但我不明白“OR”在这里是如何工作的。

由于

1 个答案:

答案 0 :(得分:5)

or是一个按位操作。 C = A or B确保设置C中的所有位,这些位在B中的中设置。

示例:

   01001001
or 00011000
   --------
   01011001

AccountOptionsEnum.UF_ACCOUNTDISABLE可能是2^x形式的值,这意味着只设置了一个位。我们假设它是右边的第四位:

00001000   = UF_ACCOUNTDISABLE

操作X = X or UF_ACCOUNTDISABLE确保在X中设置第四个位。如果之前已设置,则没有任何变化:

   00011100 old X
or 00001000 UF_ACCOUNTDISABLE
   --------
   00011100 new X

如果尚未设置,则将设置:

   00010100 old X
or 00001000 UF_ACCOUNTDISABLE
   --------
   00011100 new X

基本上,通常使用以下按位操作:

X = X or FLAG         ' sets FLAG in X
X = X and not FLAG    ' removes FLAG from X
X = X xor FLAG        ' toggles FLAG in X
if (X and FLAG) <> 0  ' checks if FLAG is set in X