4

アプリケーションのソース コードでこの行を見つけましたが、2 つのフラグの間にあるビット演算子または包含演算子 " | " の意味がわかりません。

notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);

次の行の演算子|=の意味もわかりませんでした。

notification.flags |= Notification.FLAG_AUTO_CANCEL;

誰かが私を助けてくれます。

4

6 に答える 6

7

他の誰も答えていない間に答えを始めたので、とにかく終わらせることにしました...

パイプとアンパサンドは、それぞれ操作と操作| and &を実行します。ORAND

ブール論理を実行するandを||見ることに慣れているでしょう。&&ORAND| or &

フラグのドキュメントを見ると、clear_top のフラグは 0x04000000 で、single_top は 0x20000000 です。

したがって、実行している操作は次のとおりです。0x04000000 OR 0x20000000 = 0x24000000

必要なフラグの両方を使用するために、必要なビットを設定します。

a |= b演算子は、他の場所で見慣れている,またはa = a | bの使用法と同様に、のオーバーロードされた等価物です。+=--++

于 2013-07-05T10:31:00.390 に答える
2

たとえば、FLAG_ACTIVITY_CLEAR_TOP が 2 で、FLAG_ACTIVITY_SINGLE_TOP が 4 であるとします。したがって、2 進数では、10 進値 2 の場合は 0000000010 となり、値 4 の場合は 00000100 となります。これら 2 つの値の間の 2 進数または演算により、値 6 : 00000110 ( 2 と 4 の両方の on ビットがオンです)。suck 定数に 2 の累乗値を使用すると、一意の値のみがビットごとに出力されるか、次のようになります。

例: 1 は 00000001 2 は 00000010 4 は 00000100 8 は 00001000 16 は 00010000 .....

このようにフラグを設定している場合、元のフラグをデコードするのは非常に簡単です。元のフラグでビット単位の AND 演算を実行するだけです。元のフラグがゼロの場合は、フラグが存在しない場合、つまりフラグ自体の場合はフラグが立っています。

例: フラグ SOME_FLAG の 000011000 をチェックしてみましょう - そして例のポルプスの値が 8 - 00001000 であるとしましょう。フラグ SOME_FLAG を含めないでください (2 の累乗値を持つ他のフラグと同様)、0 が返されます。

于 2013-07-05T10:29:40.567 に答える
2

| | b は、a と b のビットごとの OR です。

ビットごとの OR による代入

a1 |= a2;

の略です:

a1 = a1 | a2;

|= は += と同じように読みます。

于 2013-07-05T10:26:46.907 に答える
1

これらのフラグを見ると、すべて 2 の累乗であることがわかります。これは、ちょうど 1 つのビットが 1 に設定されることを意味するため、この場合、ビット単位の or を実行することは、これらすべてのフラグを設定することを意味します。

于 2013-07-05T10:28:52.830 に答える
1

と同じですnotification.flags = (notification.flags | Notification.FLAG_AUTO_CANCEL);

参照。a += bと同等ですa = (a + b);

ここでは、わかりやすくするために余分な括弧を使用しました。

于 2013-07-05T10:25:42.863 に答える
1

私の知る限り、これらはビット演算子です。

バトシェバが書いたように、それは(notification.flags | Notification.FLAG_AUTO_CANCEL);

これは論理的な or です。詳細については、 Oracle.comを参照してください。

ウィキペディアに関する情報またはウィキペディアでの情報。

于 2013-07-05T10:26:59.553 に答える