본문 바로가기

언어/Java

[ 자바 / Java ] 논리 연산자 사용하기

반응형

자바의 논리 연산자(Logical Operators)는 논리적 조건을 조합하거나 부정하는 데 사용됩니다. 이 연산자들은 boolean 값(true 또는 false)을 다루며, 복잡한 조건을 만들거나 제어 흐름을 관리할 때 유용합니다. 자바에서는 다음과 같은 주요 논리 연산자를 제공합니다:

  1. AND 연산자 (&&)
  2. OR 연산자 (||)
  3. NOT 연산자 (!)
  4. 비트 논리 AND 연산자 (&)
  5. 비트 논리 OR 연산자 (|)
  6. 비트 논리 XOR 연산자 (^)
  7. 비트 NOT 연산자 (~)

각 연산자의 사용법과 동작을 자세히 살펴보겠습니다.

1. AND 연산자 (&&)

AND 연산자는 두 조건이 모두 true일 때 true를 반환합니다. 하나라도 false이면 false를 반환합니다. AND 연산자는 단락 평가(short-circuit evaluation)를 수행합니다. 즉, 첫 번째 조건이 false이면 두 번째 조건을 평가하지 않습니다.

예시:

public class AndOperatorExample {
    public static void main(String[] args) {
        int age = 25;
        boolean isAdult = (age > 18) && (age < 30); // 두 조건이 모두 true

        System.out.println("Is Adult: " + isAdult); // true

        boolean isTeenager = (age > 12) && (age < 20); // 한 조건이 false

        System.out.println("Is Teenager: " + isTeenager); // false
    }
}

위의 예시에서 && 연산자는 두 조건이 모두 true인 경우에만 true를 반환합니다.

2. OR 연산자 (||)

OR 연산자는 두 조건 중 하나라도 true이면 true를 반환합니다. 둘 다 false일 때만 false를 반환합니다. OR 연산자도 단락 평가(short-circuit evaluation)를 수행합니다. 즉, 첫 번째 조건이 true이면 두 번째 조건을 평가하지 않습니다.

예시:

public class OrOperatorExample {
    public static void main(String[] args) {
        int temperature = 75;
        boolean isComfortable = (temperature > 60) || (temperature < 80); // 한 조건이 true

        System.out.println("Is Comfortable: " + isComfortable); // true

        boolean isFreezingOrBoiling = (temperature < 32) || (temperature > 212); // 두 조건이 모두 false

        System.out.println("Is Freezing or Boiling: " + isFreezingOrBoiling); // false
    }
}

위의 예시에서 || 연산자는 두 조건 중 하나라도 true이면 true를 반환합니다.

3. NOT 연산자 (!)

NOT 연산자는 단일 조건의 논리적 부정을 수행합니다. 즉, truefalse로, falsetrue로 바꿉니다.

예시:

public class NotOperatorExample {
    public static void main(String[] args) {
        boolean isRaining = true;
        boolean isSunny = !isRaining; // 논리적 부정

        System.out.println("Is Raining: " + isRaining); // true
        System.out.println("Is Sunny: " + isSunny); // false
    }
}

위의 예시에서 ! 연산자는 isRaining의 값을 부정하여 isSunny에 반대 값을 할당합니다.

4. 비트 논리 AND 연산자 (&)

비트 논리 AND 연산자는 각 비트를 AND 연산하여 새로운 값을 생성합니다. 두 비트가 모두 1일 때 1을 반환합니다. 이 연산자는 단락 평가(short-circuit evaluation)를 수행하지 않으며, 두 조건을 모두 평가합니다.

예시:

public class BitwiseAndOperatorExample {
    public static void main(String[] args) {
        int a = 12; // 1100 in binary
        int b = 10; // 1010 in binary

        int result = a & b; // 1000 in binary (8 in decimal)

        System.out.println("Bitwise AND Result: " + result); // 8
    }
}

위의 예시에서 & 연산자는 두 숫자의 각 비트를 AND 연산하여 새로운 값을 생성합니다.

5. 비트 논리 OR 연산자 (|)

비트 논리 OR 연산자는 각 비트를 OR 연산하여 새로운 값을 생성합니다. 두 비트 중 하나라도 1이면 1을 반환합니다.

예시:

public class BitwiseOrOperatorExample {
    public static void main(String[] args) {
        int a = 12; // 1100 in binary
        int b = 10; // 1010 in binary

        int result = a | b; // 1110 in binary (14 in decimal)

        System.out.println("Bitwise OR Result: " + result); // 14
    }
}

위의 예시에서 | 연산자는 두 숫자의 각 비트를 OR 연산하여 새로운 값을 생성합니다.

6. 비트 논리 XOR 연산자 (^)

비트 논리 XOR 연산자는 각 비트를 XOR 연산하여 새로운 값을 생성합니다. 두 비트가 서로 다를 때 1을 반환합니다.

예시:

public class BitwiseXorOperatorExample {
    public static void main(String[] args) {
        int a = 12; // 1100 in binary
        int b = 10; // 1010 in binary

        int result = a ^ b; // 0110 in binary (6 in decimal)

        System.out.println("Bitwise XOR Result: " + result); // 6
    }
}

위의 예시에서 ^ 연산자는 두 숫자의 각 비트를 XOR 연산하여 새로운 값을 생성합니다.

7. 비트 NOT 연산자 (~)

비트 NOT 연산자는 각 비트를 반전시킵니다. 즉, 10으로, 01로 변환합니다. 이는 2의 보수 표현에서 사용되며, 숫자의 부호를 반전시킵니다.

예시:

public class BitwiseNotOperatorExample {
    public static void main(String[] args) {
        int a = 12; // 1100 in binary

        int result = ~a; // 0011 in binary (inverting all bits results in -13 in decimal for signed integers)

        System.out.println("Bitwise NOT Result: " + result); // -13
    }
}

위의 예시에서 ~ 연산자는 숫자의 각 비트를 반전시켜 새로운 값을 생성합니다.

8. 논리 연산자 사용 예

다양한 상황에서 논리 연산자를 사용하는 예제를 보겠습니다:

public class LogicalOperatorsDemo {
    public static void main(String[] args) {
        int age = 20;
        boolean hasLicense = true;

        // AND 연산자
        boolean canDrive = (age >= 18) && hasLicense;
        System.out.println("Can Drive: " + canDrive); // true

        // OR 연산자
        boolean canVoteOrDrink = (age >= 18) || (age >= 21);
        System.out.println("Can Vote or Drink: " + canVoteOrDrink); // true

        // NOT 연산자
        boolean isMinor = !(age >= 18);
        System.out.println("Is Minor: " + isMinor); // false

        // 비트 논리 연산자
        int permissions = 0b1010; // Read and Write permissions
        int readPermission = 0b1000; // Read permission
        int writePermission = 0b0010; // Write permission

        boolean hasReadPermission = (permissions & readPermission) != 0;
        System.out.println("Has Read Permission: " + hasReadPermission); // true

        boolean hasWritePermission = (permissions & writePermission) != 0;
        System.out.println("Has Write Permission: " + hasWritePermission); // true

        // XOR 연산자
        int a = 6; // 110 in binary
        int b = 3; // 011 in binary
        int xorResult = a ^ b; // 101 in binary (5 in decimal)
        System.out.println("XOR Result: " + xorResult); // 5

        // 비트 NOT 연산자
        int notResult = ~a; // 001 in binary (inverting all bits results in -7 in decimal for signed integers)
        System.out.println("NOT Result: " + notResult); // -7
    }
}

이 예제에서는 논리 연산자를 사용하여 조건을 평가하고, 비트 논리 연산자를 사용하여 비트 패턴을 조작하는 방법을 보여줍니다.

자바의 논리 연산자는

복잡한 조건을 조합하거나 비트 수준에서 데이터를 처리할 때 매우 유용합니다. 이를 효과적으로 사용하는 방법을 이해하면 논리적 제어와 비트 조작 작업에서 유용하게 활용할 수 있습니다.

반응형