c# - 如何使用 AND 检查 C# 中是否存在某个位?

标签 c# active-directory byte boolean-logic

如何使用逻辑运算符来确定某个位是否已设置,或者位移是唯一的方法吗?

我找到了这个 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},值为 0x00000010isFlag_Schema_Base_Object,是0x02

最佳答案

resFlag0x00000010这是十进制的 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/

相关文章:

java - 将位的字符串表示形式转换为字节

Python socket 接收和存储数据

c# - "as"和可空类型的性能惊喜

c# - 抛出了 'Microsoft.Online.Administration.Automation.MicrosoftOnlineException' 类型的异常

c# - 如何通过 SSL 从 LDAP 获取 DirectoryEntry?

winapi - 用于搜索的通用 LDAP 库?

JavaScript - 从 HTML img src 获取字节大小

c# - 为什么.NET Core DI 容器不注入(inject) ILogger?

C# 将字符串转换为十六进制并对十六进制数进行异或

c# - 在谈论各自的规则时,StyleCop 和 Code Analysis 之间有哪些区别?