簡體   English   中英

如何使用AND檢查C#是否存在?

[英]How do I check for presence of a bit in C# using AND?

如何使用邏輯運算符確定是否設置了位,或者移位是唯一方法?

我發現這個問題 ,使用位移,但我認為我可以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

resFlag0x00000010 ,十進制為16,二進制為10000 因此,盡管您的注釋說“如果設置了第10位”,您似乎還是想測試第4位(第0位是最低有效位)。

如果確實需要測試位4,則需要將isFlag_Schema_Base_Object初始化為16,即0x10

無論如何,你是對的-你不需要做比特移位,看是否有位被設置,你可以AND使用具有只是位設置一個恆定值,看看結果是非零。

如果該位置1:

                 original  xxx1xxxx
                      AND
isFlag_Schema_Base_Object  00010000
-----------------------------------
                        =  00010000 (non-zero)

但是,如果未設置位:

                 original  xxx0xxxx
                      AND
isFlag_Schema_Base_Object  00010000
-----------------------------------
                        =  00000000 (zero)

話雖如此,使用值1<<4初始化isFlag_Schema_Base_Object可能更清楚,以明確表明您正在測試是否設置了位4。

如果您知道要檢查的位並且正在處理int,則可以使用BitVector32

int yourValue = 5;
BitVector32 bv = new BitVector32(yourValue);
int bitPositionToCheck = 3;
int mask = Enumerable.Range(0, bitPositionToCheck).Select(BitVector32.CreateMask).Last();
bool isSet = bv[mask];

使用移位比使用CreateMask可能更干凈。 但它在那里:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM