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