1. ホーム
  2. ジャワ

[解決済み] |=」とはどういう意味ですか?(パイプイコール演算子)

2022-03-03 21:12:41

質問

Google検索やStack Overflowで検索してみたのですが、検索結果が表示されません。オープンソースのライブラリのコードで見たことがあります。

Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;

"|="は何を意味するのでしょうか( pipe equal operator を意味します。

どのように解決するのですか?

|= と同じように読み取ります。 += .

notification.defaults |= Notification.DEFAULT_SOUND;

と同じです。

notification.defaults = notification.defaults | Notification.DEFAULT_SOUND;

ここで | はビット単位のOR演算子です。

すべての演算子を参照する こちら .

ビット演算子が使われているのは、よくあることですが、これらの定数によってint型にフラグを持たせることができるからです。

もし、あなたが 見る を見ると、これらの定数は2の累乗であることがわかる。

public static final int DEFAULT_SOUND = 1;
public static final int DEFAULT_VIBRATE = 2; // is the same than 1<<1 or 10 in binary
public static final int DEFAULT_LIGHTS = 4; // is the same than 1<<2 or 100 in binary

つまり、ビット単位のORでフラグを追加することができるのです

int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // same as 001 | 010, producing 011

だから

myFlags |= DEFAULT_LIGHTS;

は、単にフラグを追加することを意味します。

また、対称的に、フラグが設定されていることをテストするために & :

boolean hasVibrate = (DEFAULT_VIBRATE & myFlags) != 0;