1. 논리 연산자(&&, ││, !)
││(OR 결합) : 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다.
&&(AND 결합) : 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다.
* 논리 연산자는 피연산자로 boolean 타입 또는 boolean 타입의 값을 결과로 하는 조건식만을 허용한다.
논리 연산자가 자주 사용되는 몇 가지 예는 다음과 같다.
x > 10 && x < 20; // 10 < x < 20 으로 표기 불가
// x는 10보다 크고, 20보다 작다.
i % 2 == 0 || i % 3 == 0;
// i는 2의 배수 또는 3의 배수이다.
(i % 2 == 0 || i % 3) && i % 6 == 0; '&&'가 '||'보다 우선순위가 높음
// i는 2의 배수 또는 3의 배수지만, 6의 배수는 아니다.
ch >= '0' && ch <= '9'; // 유니코드 '0' = 48
// 문자 ch는 숫자('0'~'9')이다.
(ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z');
// 문자 ch는 알파벳(대문자 또는 소문자)이다.
- 예제 OperatorEx24.java
public class OperatorEx24 {
public static void main(String[] args) {
int x = 0;
char ch = ' ';
x = 15;
System.out.printf("x=%d, 10 < x && < 20 =%b%n", x, 10 < x && x < 20);
x = 6;
System.out.printf("x=%2d, x%%2==0 || x%%3==0 && x%%6!0 =%b%n", x, x%2==0 || x%3 == 0 && x%6!=0);
System.out.printf("x=%2d, (x%%2==0 || x%%3==0) && x%%6!0 =%b%n", x, (x%2==0 || x%3 == 0) && x%6!=0);
ch = '1';
System.out.printf("ch='%c', '0' <= ch && ch <= '9' =%b%n", ch, ch >= '0' && ch <= '9');
ch = 'a';
System.out.printf("ch='%c', 'a' <= ch && ch <= 'z' =%b%n", ch, ch >= 'a' && ch <= 'z');
ch = 'A';
System.out.printf("ch='%c', 'A' <= ch && ch <= 'Z' =%b%n", ch, ch >= 'A' && ch <= 'Z');
ch = 'q';
System.out.printf("ch='%c', ch == 'q' || ch == 'Q' =%b%n", ch, ch == 'q' || ch == 'Q');
}
}
- 예제 OperatorEx25.java
import java.util.Scanner;
public class OperatorEx25 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char ch = ' ';
System.out.printf("문자를 하나 입력하세요.>");
String input = scanner.nextLine();
ch = input.charAt(0);
if(ch >= '0' && ch <= '9') {
System.out.printf("입력하신 문자는 숫자입니다.%n");
}
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
System.out.printf("입력하신 문자는 영문자입니다%n");
}
}
}
효율적인 연산
'││'(OR 연산)의 경우, 두 피연산자 중 어느 한 쪽만 '참'이어도 전체 결과가 '참'이다.
→ 좌측 피연산자가 'true'이면, 우측 피연산자의 값은 평가하지 않는다.
'&&'(AND 연산)의 경우, 어느 한쪽만 '거짓'이어도 전체 결과는 '거짓'이다.
→ 좌측 피연산자가 'false'이면, 우측 피연산자는 평가하지 않는다.
2. 논리 부정 연산자(!)
이 연산자는 피연산자가 true이면 false를, false이면 true를 결과로 반환한다.
x | !x |
true | false |
false | true |
논리 부정 연산자 '!'는 조건문과 반복문의 조건식에서 주로 사용된다.
ch < 'a' ││ ch > 'z' ↔ !(ch >= 'a' && ch <= 'z')
참고문헌 : 남궁성(2016), Java의 정석, 도우출판