package Algorithmus.BitweisesOperatoren;

public class AND {
	public static void main(String[] args) {
		/*
		 * Bitweises UND (&): - Funktion: Der & Operator prüft beide Operanden bitweise
		 * 	und gibt true zurück, wenn beide Operanden true sind (bei logischen Ausdrücken).
		 * 
		 * - Merkmal: Beide Bedingungen (x und y) werden immer ausgewertet, unabhängig
		 * 		davon, ob die erste Bedingung false ergibt.
		 * 
		 * - Hinweis: Der & Operator kann auch bitweise verwendet werden, um die Bits
		 * 		zweier Ganzzahlen zu vergleichen.
		 */

		// Beispiel:
		boolean x = true;
		boolean y = false;
		// z ist false, weil y false ist, aber y wird dennoch ausgewertet.
		boolean z = x & y;

		// Praktischer Einsatz:
		int a = 5;
		int b = 0;

		// Beide Bedingungen werden überprüft. b wird erhöht, auch wenn die Bedingung a
		// > 5 false ist.
		if ((b++ < 10) & a > 5)
			System.out.println(a);

		System.out.println(b); // b = 1

		/*
		 * Logisches UND (&&): - Funktion: Der && Operator prüft beide Operanden und
		 * gibt true zurück, wenn beide true sind (bei logischen Ausdrücken).
		 * 
		 * - Merkmal: Wenn der erste Operand false ist, wird der zweite Operand nicht
		 * mehr ausgewertet. Dies spart Rechenzeit und kann in bestimmten Fällen Fehler
		 * vermeiden (z. B. Division durch 0).
		 */

		// Praktischer Einsatz:
		int a2 = 5;
		int b2 = 0;

		// Die zweite Bedingung wird nicht überprüft, weil a2 > 5 false ist. b2 wird
		// daher nicht erhöht.
		if (a2 > 5 && (b2++ < 10))
			System.out.println(a2);

		System.out.println(b2); // b = 0

	}
}
