자바의 논리 연산자(Logical Operators)는 논리적 조건을 조합하거나 부정하는 데 사용됩니다. 이 연산자들은 boolean
값(true
또는 false
)을 다루며, 복잡한 조건을 만들거나 제어 흐름을 관리할 때 유용합니다. 자바에서는 다음과 같은 주요 논리 연산자를 제공합니다:
- AND 연산자 (
&&
) - OR 연산자 (
||
) - NOT 연산자 (
!
) - 비트 논리 AND 연산자 (
&
) - 비트 논리 OR 연산자 (
|
) - 비트 논리 XOR 연산자 (
^
) - 비트 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 연산자는 단일 조건의 논리적 부정을 수행합니다. 즉, true
를 false
로, false
를 true
로 바꿉니다.
예시:
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 연산자는 각 비트를 반전시킵니다. 즉, 1
은 0
으로, 0
은 1
로 변환합니다. 이는 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
}
}
이 예제에서는 논리 연산자를 사용하여 조건을 평가하고, 비트 논리 연산자를 사용하여 비트 패턴을 조작하는 방법을 보여줍니다.
자바의 논리 연산자는
복잡한 조건을 조합하거나 비트 수준에서 데이터를 처리할 때 매우 유용합니다. 이를 효과적으로 사용하는 방법을 이해하면 논리적 제어와 비트 조작 작업에서 유용하게 활용할 수 있습니다.
'언어 > Java' 카테고리의 다른 글
[ Java ] 자바 대입연산자 사용하기 (1) | 2024.06.09 |
---|---|
[ Java ] 삼항 연산자 사용해보기 (0) | 2024.06.09 |
[ Java ] 비교 연산자 사용하기 (0) | 2024.06.09 |
[ Java ] 쉬프트 연산자 >>> 사용하기 (0) | 2024.06.09 |
[ Java ] 쉬프트 연산자 사용하기 (0) | 2024.06.09 |