如何使用逻辑运算符来确定是否设置了位,或者是位移的唯一方式?如何使用AND检查C#中是否存在一点?
我发现这个question使用位移,但我想我可以只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
}
}
}
当我看到调试器: resFlag
是一个object{int}
和值是0x00000010
。 isFlag_Schema_Base_Object
,是0x02
只是澄清,如果resflag是我的AND是非零:0x00011010?这是我的目标。 – LamonteCristo 2010-09-29 18:22:01
是的 - 只要'isFlag_Schema_Base_Object'本身只设置了一个位,那么'用AND'与'original'将会给你零(如果该位被设置)或'isFlag_Schema_Base_Object'(非零,意味着位被设置)。您可以测试结果是否为零/非零,或者是否等于/不等于'isFlag_Schema_Base_Object'。这些测试是相同的。如果你有任何疑问,试试看:-) – 2010-09-29 18:25:46
@ MakerOfThings7:是的。你的AND将导致0为其他位,但1为你正在检查的(如果并且只有当你正在检查的那个位被设置)。 – 2010-09-29 18:26:36