Je connais les règles pour &&
et ||
mais quels sont &
et |
? S'il vous plaît, expliquez-moi cela avec un exemple.
Voulait clarifier.. & reviendra à 1 seulement si les deux sont à 1? Donc 101 & 001 serait 001? Correct?
Je connais les règles pour &&
et ||
mais quels sont &
et |
? S'il vous plaît, expliquez-moi cela avec un exemple.
Il s'agit des opérateurs ET bit à bit et OU bit à bit.
int a = 6; // 110
int b = 4; // 100
// ET bit à bit
int c = a & b;
// 110
// & 100
// -----
// 100
// OU bit à bit
int d = a | b;
// 110
// | 100
// -----
// 110
System.out.println(c); // 4
System.out.println(d); // 6
Merci à Carlos d'avoir signalé la section appropriée dans le Java Language Spec (15.22.1, 15.22.2) concernant les différents comportements de l'opérateur en fonction de ses entrées.
En effet, lorsque les deux entrées sont de type booléen, les opérateurs sont considérés comme des opérateurs logiques booléens et se comportent de manière similaire aux opérateurs Conditionnels-Et (&&
) et Conditionnels-Ou (||
) à l'exception du fait qu'ils ne court-circuitent pas, donc alors que ce qui suit est sûr:
if((a != null) && (a.something == 3)){
}
Ceci ne l'est pas:
if((a != null) & (a.something == 3)){
}
"Court-circuiter" signifie que l'opérateur n'examine pas nécessairement toutes les conditions. Dans les exemples ci-dessus, &&
examinera la deuxième condition seulement lorsque a
n'est pas null
(sinon toute l'instruction retournera false, et il serait inutile d'examiner les conditions suivantes de toute façon), donc l'instruction de a.something
ne provoquera pas d'exception, ou est considérée comme "sûre".
L'opérateur &
examine toujours chaque condition de la clause, donc dans les exemples ci-dessus, a.something
peut être évalué lorsque a
est en fait une valeur null
, provoquant une exception.
Voulait clarifier.. & reviendra à 1 seulement si les deux sont à 1? Donc 101 & 001 serait 001? Correct?
Je pense que vous parlez de la signification logique des deux opérateurs, voici un résumé sous forme de tableau :
boolean a, b;
Opération Signification Remarque
--------- ------------ -------
a && b ET logique court-circuit
a || b OU logique court-circuit
a & b ET logique booléen pas de court-circuit
a | b OU logique booléen pas de court-circuit
a ^ b OU exclusif logique booléen
!a NON logique
court-circuit (x != 0) && (1/x > 1) SÛR
pas de court-circuit (x != 0) & (1/x > 1) PAS SÛR
Évaluation en court-circuit, évaluation minimale ou évaluation de McCarthy (d'après John McCarthy) est la sémantique de certains opérateurs booléens dans certains langages de programmation où le deuxième argument est exécuté ou évalué uniquement si le premier argument ne suffit pas à déterminer la valeur de l'expression : lorsque le premier argument de la fonction ET évalue à faux, la valeur globale doit être faux ; et lorsque le premier argument de la fonction OU évalue à vrai, la valeur globale doit être vrai.
Pas Sûr signifie que l'opérateur examine toujours chaque condition dans la clause, donc dans les exemples ci-dessus, 1/x peut être évalué lorsque x est, en fait, une valeur 0, provoquant une exception.
@Torres - Veuillez élargir votre réponse en expliquant "court-circuitage" et "sûr". Est-ce que "ou exclusif" et "non logique" ne sont pas non plus des "court-circuitages"? Et pourquoi l'appelle-t-on "non logique" au lieu de "non logique booléen"? Et pourquoi le "NON logique" n'est-il pas regroupé avec le "ET logique" et le "OU logique"? Bonne réponse mais nécessite du travail.
@tfmontague, J'ai expliqué ce que signifie le court-circuit (en modifiant cette réponse).. En attendant que ma modification soit "examinée par les pairs."
Qu'est-ce qui est "non sécurisé" concernant le non-court-circuit? Ne devrait-il pas être plus sûr que d'utiliser des court-circuits? Au fait: vous n'expliquez pas vraiment le terme "court-circuit". Cela signifie que sur "non-court-circuit" toutes les parties sont d'abord évaluées, puis l'opération booléenne est appliquée, tandis que sur court-circuit, l'évaluation s'arrête lorsque la première expression satisfait la condition, comme (a || b) n'évaluera pas b, si a est vrai et l'opération ou renverra vrai, peu importe ce que b est.
Découvrez l'évaluation par court-circuit.
Les opérateurs && et || ne vérifieront pas le deuxième argument si le premier argument est suffisant pour déterminer le résultat.
Par exemple
bool something = true;
bool anotherThing = false;
if (something && anotherThing)
//ou
if (something || anotherThing)
Dans l'exemple ci-dessus, la variable anotherThing
ne sera pas évaluée car something = true
, donc l'évaluation globale est vraie.
Lorsque vous utilisez & ou |, tous les arguments sont évalués, que le résultat global puisse être trouvé à partir du premier argument ou non.
&
et |
sont des opérateurs bit à bit sur les types entiers (par exemple int
) : http://download.oracle.com/javase/tutorial/java/nutsandbolts/op3.html
&&
et ||
fonctionnent uniquement avec des booléens (et effectuent un court-circuit, comme d'autres réponses l'ont déjà mentionné).
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.
0 votes
Voir ce message d'une excellente explication : stackoverflow.com/questions/7101992/...