ビット 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つの許可値を持っています。1 つ目は 5/101 (必要な許可) で、2 つ目は 6/110 (ユーザーが持っている許可) です。
- 常に 1 になる最初のブロックを除いて、システム内の特定の許可規則を表す 3 番目のブロックを (ビット単位で) 比較したいと考えています。
- 「必要な許可」ビットマスクは次のことを意味します。
1
- 左パディングゼロを考慮できるようにするために使用する常に固定の値 (これを達成する別の方法がない限り)。0
- この比較には役に立たない別のパーミッション ルール (パーミッション 1 と呼びましょう)。1
- 現在のパーミッション ルールに必要なパーミッション (パーミッション 2 を呼び出しましょう)。
- 「ユーザーが持つ権限」とは、次のことを意味します。
1
- ストライプアウトする固定値。1
- 権限 1 のユーザーの値を表します。0
- パーミッション 2 のユーザーの値を表します。パーミッション 2 の値は 1 ですが、ユーザーの値が 0 の場合、必要なアクションは許可されません。反対に、アクションの実行が許可されます。
この場合のより良い解決策も正解と見なされます。