Ce n' “|=” signifie? (la pipe de l'égalité de l'opérateur)
J'ai essayé de chercher l'aide de la Recherche Google et de Pile Overflow, mais il n'a pas montré de résultats. J'ai vu cela en open source, le code de bibliothèque:
Notification notification = new Notification(icon, tickerText, when);
notification.defaults |= Notification.DEFAULT_SOUND;
notification.defaults |= Notification.DEFAULT_VIBRATE;
Ce n' "|=" ( pipe equal operator
) signifie?
- Je me demande si l'ajout de quelque chose comme
pipe equal operator
à cette question ou de toute autre documentation sur le sujet ne serait pas aider les gens à la recherche. - êtes-vous les gars de parler de cela docs. Il dit clairement que les docs manque de documentation sur le utilisation de cette.
- À moins que tu savais que c'était appelé pipe de l'égalité, il est vraiment difficile de faire des recherches pour les sans demander à quelqu'un.
- en effet, passé un certain temps de googler autour de venir avec un terme
vertical bar
qui finalement m'a conduit ici. - Double Possible de ce n' |= (seul tuyau d'égalité) et &=(seul esperluette égal) moyenne
- Je pense qu'ils fournissent à la fois des valeurs différentes pour les différents utilisateurs. Ils doivent cohabiter. Si non, d'après [meta.stackexchange.com/questions/10841/... ](meta post) , l'un avec la meilleure collection de réponses doit le rester. Je dirais qu'il y sont généralement mieux ici.
- Double Possible de Ce qui ne l' | opérateur= n'en Java?
Vous devez vous connecter pour publier un commentaire.
|=
lit de la même façon que+=
.est le même que
où
|
est le bit à bit OU de l'exploitant.Tous les opérateurs sont référencés ici.
Un peu sage opérateur est utilisé parce que, comme c'est fréquent, ces constantes permettent un int pour porter les drapeaux.
Si vous look à ces constantes, vous verrez qu'ils sont dans les puissances de deux :
De sorte que vous pouvez utiliser bit-wise OU pour ajouter des drapeaux
donc
signifie simplement que nous ajouter un drapeau.
Et symétriquement, nous testons un indicateur est défini à l'aide de
&
:j += 1;
est le même quej = j + 1;
.int defaults = 0b1001; defaults |= 0b1010; defaults == 0b1011;
j += 1
n'est pas exactement le même quej = j + 1
.j
estvolatile
?), mais je vais prendre votre parole.boolean hasVibrate = DEFAULT_VIBRATE & myFlags;
- pouvez-vous traduire à partir deint
àboolean
comme ça en Java? Qui serait valide en C, mais j'ai pensé en Java, il a dû être écrit commeboolean hasVibrate = ((DEFAULT_VIBRATE & myFlags) == DEFAULT_VIBRATE);
+=
enfin fait le tour pour me comprendre. Merci!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 opérateurs au niveau du bit:
Suivantes sont valides:
note tous les opérateurs sont des opérateurs binaires.
Aussi Remarque: (ci-après les points que je voulais ajouter ma réponse)
>>>
est opérateur au niveau du bit en Java qui est appelé Unsigned majmais>>>= opérateur>>>=
pas un opérateur en Java.~
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ù queA=!B
signifie que siB
esttrue
puisA
devenirfalse
(et siB
estfalse
puisA
devenirtrue
).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..vertical bar
Je cherchais une réponse sur ce
|=
n'en Groovy, et bien que les réponses ci-dessus sont à droite, ils n'ont pas de m'aider à comprendre un morceau de code que j'étais en train de regarder.En particulier, lorsqu'il est appliqué à une variable booléenne "| = "" va le mettre à TRUE la première fois qu'il rencontre un truthy expression sur le côté droit et tiendra sa VRAIE valeur pour tous |= les appels suivants. Comme un loquet.
Voici un exemple simplifié de ce:
De sortie:
Modifier:
Pourquoi est-ce utile?
Imaginez une situation où vous voulez savoir si quelque chose a changé sur une variété d'objets et de s'informer de l'un des changements. Ainsi, vous souhaitez configurer un
hasChanges
boolean et mis à|= diff (a,b)
et puis|= dif(b,c)
etc.Voici un bref exemple:
y|=expr
est pas de court-circuit (contrairement ày = y || expr
), ce qui signifie queexpr
toujours évalué. Ce n'était pas évident pour moi, pour la première fois 🙂 Donc, il est important de noter avant de refactoring de remplacementy|=expr
↔y=y||x
est ce n'est pas sémantiquement équivalent dans le casexpr
a effectivement des effets secondaires.hasChanges
il serait probablement mieux préférery=y||x
forme de bénéficier de court-parcours, parce que quand vous avez trouvé tout changement, il n'est pas nécessaire de faire susequent diff parce que vous connaissez déjà la réponse. (Particulièrement important dans la situation de vie réelle lorsque les objets comparés sont compliquées etdiff
ing eux n'est pas assez rapide)||
et&&
, et dans les sections correspondantes 15.23 et 15.24 de la spécification de ce fait est clairement déclarée, et cette différence de|
et&
est souligné.||=
et&&=
opérateurs qui enfreindrait la règle et nécessitent une mention spéciale).C'est un raccourcissement de cette:
Et
|
est un peu sage OU.|
est le au niveau du bit-ou opérateur, et elle est appliquée comme+=
.Remarque: ||= n'existe pas. (ou logique)
Vous pouvez utiliser
ou
y |= expr
avec les booléens et ça donne le même résultat sury
que vos variantes avec le important de noter que il n'est pas court-curtuit, ce qui signifie que expr est toujours évalué, même en cas dey==true