如何使用邏輯運算符來確定是否設置了位,或者是位移的唯一方式?如何使用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