goo*_*ate 2 c# byte boolean-logic active-directory
如何使用逻辑运算符来确定某个位是否已设置,或者是唯一的位移位?
我发现这个问题使用了位移,但我认为我可以AND超出我的价值.
对于某些上下文,我正在从Active Directory中读取值并尝试确定它是否为架构基础对象.我认为我的问题是语法问题,但我不确定如何纠正它.
foreach (DirectoryEntry schemaObjectToTest in objSchema.Children)
{
var resFlag = schemaObjectToTest.Properties["systemFlags"].Value;
//if bit 10 is set then can't be made confidential.
if (resFlag != null)
{
byte original = Convert.ToByte( resFlag );
byte isFlag_Schema_Base_Object = Convert.ToByte( 2);
var result = original & isFlag_Schema_Base_Object;
if ((result) > 0)
{
//A non zero result indicates that the bit was found
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我查看调试器时:
resFlag是object{int}和,值是0x00000010.
isFlag_Schema_Base_Object是的0x02
resFlag是0x00000010十进制的16或10000二进制.所以看起来你想要测试第4位(第0位是最低有效位),尽管你的评论说"如果第10位被设置".
如果确实需要测试第4位,则isFlag_Schema_Base_Object需要初始化为16,即0x10.
无论如何,你是对的 - 你不需要进行位移以查看是否设置了一个位,你可以AND使用一个只设置该位的常量值,并查看结果是否为非零.
如果该位置位:
original xxx1xxxx
AND
isFlag_Schema_Base_Object 00010000
-----------------------------------
= 00010000 (non-zero)
Run Code Online (Sandbox Code Playgroud)
但如果未设置该位:
original xxx0xxxx
AND
isFlag_Schema_Base_Object 00010000
-----------------------------------
= 00000000 (zero)
Run Code Online (Sandbox Code Playgroud)
话虽如此,isFlag_Schema_Base_Object使用该值初始化可能更清楚1<<4,以明确您正在测试是否设置了第4位.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |