223 votes

Ce n'"|="? (la pipe de l'égalité de l'opérateur)

J'ai essayé de chercher l'aide de la Recherche Google et de Dépassement de Pile, mais il n'a pas montré de résultats. J'ai vu cela dans l'opensource code de la bibliothèque:

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

Ce n' "|=" ( pipe equal operator )?

295voto

dystroy Points 145126

|= lit de la même façon que +=.

notification.defaults |= Notification.DEFAULT_SOUND;

est le même que

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

| est le bit à bit OU de l'exploitant.

Tous les opérateurs sont référencés ici.

Un peu de sages-opérateur est utilisé parce que, comme c'est fréquent, ces constantes permettent un int pour porter les drapeaux.

Si vous regardez à ces constantes, vous verrez qu'ils sont dans les puissances de deux :

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

Ainsi, vous pouvez utiliser bit-wise OU pour ajouter des drapeaux

int myFlags = DEFAULT_SOUND | DEFAULT_VIBRATE; // makes 001 | 100, which is 101

donc

myFlags |= DEFAULT_LIGHTS;

signifie simplement que nous ajouter un drapeau.

Et symétriquement, nous testons un indicateur est défini à l'aide de & :

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

37voto

Grijesh Chauhan Points 28442

Vous avez déjà eu suffisamment de réponse pour votre question. Mais peut-être que ma réponse vous aider plus sur |= type d'opérateurs binaires.

Je suis à la table d'écriture pour les opérateurs au niveau du bit:
Suivantes sont valides:

----------------------------------------------------------------------------------------
Operator   Description                                   Example
----------------------------------------------------------------------------------------
|=        bitwise inclusive OR and assignment operator   C |= 2 is same as C = C | 2
^=        bitwise exclusive OR and assignment operator   C ^= 2 is same as C = C ^ 2
&=        Bitwise AND assignment operator                C &= 2 is same as C = C & 2
<<=       Left shift AND assignment operator             C <<= 2 is same as C = C << 2
>>=       Right shift AND assignment operator            C >>= 2 is same as C = C >> 2  
----------------------------------------------------------------------------------------

remarque tous les opérateurs sont des opérateurs binaires.

Également Note: (ci-après les points que je voulais ajouter ma réponse)

  • >>> est l'opérateur au niveau du bit en Java qui est appelé Unsigned maj
    mais >>>= pas un opérateur en Java. >>>= opérateur

  • ~ est complément bit à bit bits, 0 to 1 and 1 to 0 (opérateur Unaire), mais ~= pas un opérateur.

  • En outre, ! Appelé Opérateur Logique not, mais != Vérifie si la valeur de deux opérandes sont égaux ou non, si les valeurs ne sont pas égales puis condition devient vraie. par exemple, (A != B) is true. où qu' A=!B signifie que si B est true alors A deviennent false (et si B est false alors A deviennent true).

note de côté: | n'est pas appelé pipe, au lieu de son nom OU de, la pipe est shell terminologie de transfert d'un processus à la prochaine..

13voto

Till Helge Points 6284

C'est un raccourcissement de cette:

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

Et | est un peu sage OU.

8voto

ford Points 1891

| est le bit à bit ou de l'opérateur, et elle est appliquée comme +=.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X