0

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

即它必须是这样的:

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

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

4

2 回答 2

7

这不是按位异或吗?

(110101 ^ 011001) & 011001 = 100100
于 2013-07-15T03:55:35.290 回答
1

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

result = allow & ~deny

我想它会和Pranav 的答案一样快,因为它还涉及两个操作,但如果你可以预先计算这些~deny值,它可能会更快。就个人而言,我也发现这个解决方案更容易理解。

于 2013-07-15T04:13:32.740 回答