我的系统将权限跟踪为两个位域,允许和拒绝。如果在拒绝中设置了某个位,则在确定用户权限时,必须将allow中的相应位设置为0.
即。它一定是这样的:
110101 (allow)
011001 (deny)
= 100100 (result)
我目前正在循环每一位并进行比较,但我想知道这是否可以更优雅地表达并且表现更快。
答案 0 :(得分:7)
这不是一个按位异或吗?
(110101 ^ 011001) & 011001 = 100100
答案 1 :(得分:1)
假设result
位字段表示“允许操作”,我认为这应该是一个带有倒置deny
的按位AND:
result = allow & ~deny
我想它会跟Pranav's answer一样快,因为它还涉及两个操作,但是如果你可以预先计算~deny
值,它可能会更快。就个人而言,我也觉得这个解决方案更容易理解。