如何使用逻辑运算符来确定某个位是否已设置,或者位移是唯一的方法吗?
我找到了这个 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
是0x00000010
这是十进制的 16,或 10000
以二进制形式。因此,尽管您的评论说“如果设置了第 10 位”,但您似乎想要测试第 4 位(第 0 位是最低有效位)。
如果您确实需要测试位 4,则 isFlag_Schema_Base_Object
需要初始化为16,即0x10
.
无论如何,你是对的 - 你不需要进行位移来查看是否设置了位,你可以 AND
具有仅设置了该位的常量的值,并查看结果是否非零。
如果该位被设置:
original xxx1xxxx
AND
isFlag_Schema_Base_Object 00010000
-----------------------------------
= 00010000 (non-zero)
但如果未设置该位:
original xxx0xxxx
AND
isFlag_Schema_Base_Object 00010000
-----------------------------------
= 00000000 (zero)
话虽如此,初始化isFlag_Schema_Base_Object
可能会更清楚使用值 1<<4
, 以表明您正在测试是否设置了第 4 位。
关于c# - 如何使用 AND 检查 C# 中是否存在某个位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3824539/