gpt4 book ai didi

java - 使用与权限模型的按位比较忽略第一位

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:29:49 27 4
gpt4 key购买 nike

我有位 101 和 110。我想使用忽略第一位的按位运算符进行比较,例如 01 和 10。

例子:

I have:
101
110
===
01 & 10 <- How I want to consider
x00 <- The result I want

10110
11011
=====
0110 & 1011 <- How I want to consider
x0010 <- The result I want

我如何在 java 中使用按位运算符实现这一点?

详细信息:

  • 第一位永远是 1。
  • 其他位是可变的。两个都比较的两侧将具有相同的位数。
  • 我想知道如何在考虑其他位的情况下进行比较忽略第一个。

用例:

  • 我有 2 个权限值。第一个是 5/101(所需的权限),第二个是 6/110(用户拥有的权限)。
  • 不包括第一个 block ,它永远是1,我想比较代表系统中某个权限规则的第三个 block (使用位)。
  • “所需权限”位掩码表示:
    • 1 - 我使用的始终固定的值,以便能够考虑左填充零(除非有另一种方法可以实现此目的);
    • 0 - 另一个对此比较无用的权限规则(我们称之为权限 1);
    • 1 - 当前权限规则所需的权限(我们称之为权限 2)。
  • “用户拥有的权限”是指:
    • 1 - 要剥离的固定值;
    • 1 - 表示用户对于权限1的值;
    • 0 - 表示权限 2 的用户值。权限 2 的值为 1,但用户的值为 0,则不允许他执行所需的操作。相反的人将被允许执行该操作。

对于这种情况,任何更好的解决方案也将被视为正确答案。

最佳答案

如果您知道有用的位数(例如 numofbits = 5),那么表达式的位掩码是:

bitmask = (1 << numofbits) - 1

如果您不知道 numofbits,只需使用 num = num >> 1 进行循环,并计算迭代次数,直到您得到 num = = 0

对于用例:

result = (req_roles & user_roles) & (bitmask >> 1)

这只是 and 的角色位,ans 削减了高位(始终为 1)


上一个问题的上一个答案:) :

如果您知道最高数字的位掩码(例如 bitmask = 0x1f(11111 以位为单位)),那么您需要以下表达式的结果:

result = (a ^ b) ^ (bitmask >> 1)

它有什么作用?

  • 比较所有位,相等位为0
  • 还原所有低位,所以相等的位将为 1(将高位排除在外,因此它将保持为 0)

关于java - 使用与权限模型的按位比较忽略第一位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14927950/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com