논리연산자 &&, ||, !
- x는 5보다 크고, 10보다 작다.
- x > 10 && x < 20
- i는 2의 배수 또는 3의 배수이다.
- i%2==0 || i%3==0
- i는 2의 배수 또는 3의 배수지만 6의 배수는 아니다.
- (i%2==0 || i%3==0) && i%6!=0
- 문자 ch는 숫자 (0~9)이다.
- '0' <= ch && ch <= '9'
- 문자 ch는 대문자 또는 소문자이다.
- ('a' <= ch && ch <= 'z') || ('A' <= ch && ch <= 'z')
public static void main(String[] args) {
int x = 0 ;
char ch = ' ';
x=15;
System.out.printf("x=%2d, 10 < x && 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);
x='1';
System.out.printf("ch='%c', '0' <= ch && ch <= '9' = %b%n", ch, '0' <= ch && ch <= '9');
ch='a';
System.out.printf("ch='%c', 'a' <= ch && ch <= 'z' =%b%n", ch, 'a' <= ch && ch <= 'z');
ch='A';
System.out.printf("ch='%c', 'a' <= ch && ch <= 'z' =%b%n", ch, 'A' <= ch && ch <= 'Z');
ch='q';
System.out.printf("ch='%c', ch=='q' || ch=='Q' = %b%n", ch,ch=='q' || ch=='Q');
}
//결과
x=15, 10 < x && x < 20 = true
x= 6, x%2==0 || x%3==0 && x%6!=0 =true
x= 6, (x%2==0 || x%3==0) && x%6!=0 =false
ch=' ', '0' <= ch && ch <= '9' = false
ch='a', 'a' <= ch && ch <= 'z' =true
ch='A', 'a' <= ch && ch <= 'z' =true
ch='q', ch=='q' || ch=='Q' = true
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
char ch = ' ';
System.out.print("문자를 하나 입력해주세요 : ");
String input = scanner.nextLine();
ch=input.charAt(0);
if('0'<= ch && ch <= '9') {
System.out.printf("입력하신 문자는 숫자입니다. %n");
}
if(('a'<=ch && ch <='z') || ('A'<= ch && ch <= 'Z')) {
System.out.printf("입력하신 문자는 영문자입니다. %n");
}
}
//결과
문자를 하나 입력해주세요 : a
입력하신 문자는 영문자입니다.
연산의 규칙
- or연산 '||'은 둘 중 하나라도 참이라면 참(true)이다. 즉, 좌측이 참이면 우측은 연산자에 대해서는 평가하지 않는다.
- and 연사 '&&'은 둘 중 하나라도 거짓(false)이라면 전체 연산결과가 '거짓(false)'이므로 좌측 연산결과가 거짓이라면 우측 연산은 평가하지 않는다.
- 따라서, or연산의 경우 참일 확률이 높은 피연산자를 왼쪽에 두는 것이 더 빠른 검사 결과를 얻을 수 있다.
public static void main(String[] args) {
int a = 5;
int b = 0;
System.out.printf("a=%d, b=%d%n", a, b);
System.out.printf("a!=0 || ++b!=0 = %b%n", a, a!=0 || ++b!=0);
System.out.printf("a=%d, b=%d%n", a, b);
System.out.printf("a==0 && ++b!=0 = %b%n", a==0 && ++b!=0);
System.out.printf("a=%d, b=%d%n", a, b);
}
//결과
a=5, b=0
a!=0 || ++b!=0 = true
a=5, b=0
a==0 && ++b!=0 = false
a=5, b=0
위에 코드를 통해 변수 b에 증감 연산자 '++'을 사용해서 우측 피연산자가 처리되면, b의 값이 증가하도록했으나, 두번의 연산 후에도 b의 값은 여전히 0이다. 그 이유는 우측의 값이 정해져서 좌측의 값이 실행되지 않음을 알 수 있다.
출처 : JAVA의 정석 - (남궁성지음)