【问题标题】:Visual basic: Variable assignment with ORVisual basic:使用 OR 进行变量赋值
【发布时间】:2013-04-17 20:47:32
【问题描述】:
我不明白 OR 语句在此代码示例中的作用。
DE.Properties("UserAccountControl").Value = CInt(DE.Properties("UserAccountControl").Value) Or AccountOptionsEnum.UF_ACCOUNTDISABLE
DE.Properties("UserAccountControl").Value 表示小数。
枚举是整数。
我知道这是用于停用 Active Directory 中的用户的代码,但我不明白“OR”在此处的工作原理。
谢谢
【问题讨论】:
标签:
.net
vb.net
active-directory
bit-manipulation
bit
【解决方案1】:
or 是按位运算。 C = A or B 确保在 C 中设置的所有位都设置在 A 中 或 在 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