在另一个字段中为1时,将位设置为0的最有效方法

时间:2013-07-15 03:53:39

标签: c# bit-manipulation

我的系统将权限跟踪为两个位域,允许和拒绝。如果在拒绝中设置了某个位,则在确定用户权限时,必须将allow中的相应位设置为0.

即。它一定是这样的:

   110101 (allow)
   011001 (deny)
=  100100 (result)

我目前正在循环每一位并进行比较,但我想知道这是否可以更优雅地表达并且表现更快。

2 个答案:

答案 0 :(得分:7)

这不是一个按位异或吗?

(110101 ^ 011001) & 011001 = 100100

答案 1 :(得分:1)

假设result位字段表示“允许操作”,我认为这应该是一个带有倒置deny的按位AND:

result = allow & ~deny

我想它会跟Pranav's answer一样快,因为它还涉及两个操作,但是如果你可以预先计算~deny值,它可能会更快。就个人而言,我也觉得这个解决方案更容易理解。