Opérateurs logiques

Algorithmique et langage Java

Opérateurs logiques

Les opérations logiques impliquent des valeurs booleennes.
En Java ils sont au nombre de 3.

Exemple :

class OperateursLog{
  public static void main(String[] args){
    boolean a=true;
    boolean b=false;
    System.out.println(a&&b);
    System.out.println(a||b);
    boolean c=(a&&!b)||(b&&!a);
    System.out.println(c); 
  }
}

Essayer d'appliquer un opérateur logique à des types autres que boolean renvoie une erreur de compilation. Cela arrive souvent involontairement à cause d'erreurs de syntaxe.
Par exemple

public class ExErreurs{
	public static void main(String[] args) {
		int a=5;
		int b=10;
		boolean c=(a<b)&&(b=10);
	}
}
Ce code source donne une erreur de compilation, pourquoi?

Remarque : les parenthèses sont ici facultatives car les comparaisons sont prioritaires sur les opérateurs logiques, mais elles sont conseillées pour la clarté de lecture du code.

 

Pour aller plus loin: opérateurs binaires (bit par bit)

Les opérateurs binaires réalisent une opération logique bit par bit entre les deux opérandes, tels qu'ils sont codés en binaire. Ces opérateurs servent par exemple à effectuer des opérations de masquage ou de transparence.

package initial;

public class OperateursBaB {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ConsoleTexte mc=new ConsoleTexte();
		mc.ecritLn(2|4);
		mc.ecritLn(85&42);
		mc.ecritLn(31^10);
	}

}
Pour comprendre les résultats obtenus, il faut écrire les opérandes en base 2.
Par exemple 85 s'écrit 1010101 en base 2, et 42 s'écrit 101010. Lorsqu'un digit est à 1 dans un des nombres, le digit correspondant est à 0 dans l'autre. Le "et" bit par bit effectue donc des "1 et 0" ou des "0 et 0", qui donnent tous 0.
Les opérateurs bit par bit servent à réaliser des masquages et des découpages.

Les opérateurs binaires s'appliquent à tous les types numériques entiers, aux caractères( char), et entre booléens (ils donnent alors le même résultat que leurs équivalents logiques) .
Un exemple où le programme "devine" le nombre que vous avez choisi :

package initial;

public class Magique {

	public static void main(String[] args) {
		ConsoleTexte mc=new ConsoleTexte();
		mc.ecritLn("Choisis une lettre et un nombre entier inférieur à 256 et indique-moi la lettre");
		String lu=mc.getDonnees();
		char a=lu.charAt(0);
		mc.ecrit("Effectue un OU-Exclusif binaire entre ton entier et ");
		mc.ecrit((int)a);
		mc.ecritLn(" et donne-moi le résultat.");
		int resultat=(int)mc.getValeur();
		mc.ecrit("Le nombre entier était ");
		mc.ecritLn(resultat^a);   ou-ex bit par bit entre un entier et un caractère 
		mc.ecrit("sauf si tu as fait une erreur, parce que moi je ne me trompe jamais.");		
	}

}
(L'astuce est l'utilisation de la propriété (A ou-ex B) ou-ex B = A. Le nombre à deviner pourrait être bien plus grand que 127 mais les conversions base 2-base 10 deviendraient pénibles pour l'utilisateur ! )

Pour compléter cette panoplie d'opérateurs permettant de manipuler les digits, on dispose aussi des opérateurs de décalage vers la gauche ou vers la droite , << et >>.

 
Licence Creative Commons
licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé
Auteur : Nathalie Bonnin
Professeur de Physique, Chimie, Informatique au lycée La Martinière Monplaisir (Lyon 8ème)
Contact :
nathalie.bonnin (chez) scientillula.net
Licence Creative Commons
La totalité du contenu du site Scientillula.net appartient à Nathalie Bonnin et est mise à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé