논리 연산자는 둘 이상의 조건을 '그리고(AND)'나 '또는(OR)'으로 연결하여 하나의 식으로 표현할 수 있게 해준다.
논리 연산자 '&&'는 우리말로 '그리고(AND)'에 해당하며, 두 피연산자가 모두 true일 때만 true로 결과를 얻는다.
'||'는 '또는(OR)'에 해당하며, 두 피연산자 중 오느 한 쪽만 true이어도 true를 결과로 얻는다.
논리 연산자는 피연산자로 boolean형 또는 boolean형 값을 결과로 하는 조건식만을 허용한다
||(OR결합) 피연산자 중 어느 한 쪽만 true이면 true를 결과로 얻는다
&&(AND결합) 피연산자 양쪽 모두 true이어야 true를 결과로 얻는다
public class OperatorEx24 {
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);//true
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);//true
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);//false
ch='1';
System.out.printf("ch='%c', '0' <= ch && ch <= '9' =%b%n",ch,'0'<=ch&&ch<='9');//true
ch='a';
System.out.printf("ch='%c', 'a' <= ch && ch <= 'z' =%b%n",ch,'a'<=ch&&ch<='z');//true
ch='A';
System.out.printf("ch='%c', 'A' <= ch && ch <= 'Z' =%b%n",ch,'A'<=ch&&ch<='Z');//true
ch='q';
System.out.printf("ch='%c', ch=='q' || ch=='Q' =%b%n",ch,ch=='q'||ch=='Q');//true
}
}
import java.util.*;
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('0'<=ch && ch <= '9'){
System.out.printf("입력하신 문자는 숫자입니다. %n");
}
if(('a'<=ch && ch<='z')||('A'<=ch&&ch<='Z')){
System.out.printf("입력하신 문자는 영문자입니다.%n");
}
}
}
이 예제는 사용자로부터 하나의 문자를 입력받아서 숫자인지 영문자인지 확인한다.
x | y | x || y |
---|---|---|
true | true | true |
true | false | true |
false | true | true |
false | false | false |
좌측 피연산자가 'true'이면, 우측 피연산자의 값은 평가하지 않는다.
x | y | x && y |
---|---|---|
true | true | true |
true | false | false |
false | true | false |
false | false | false |
이 연산자는 피연산자가 true이면 false를, false면 true를 결과로 반환한다.
간단히 말해서, true와 false를 반대로 바꾸는 것이다.
x | ! x |
---|---|
true | false |
false | true |
비트 연산자는 피연산자를 비트단위로 논리 연산한다.
|(OR연산자) 피연산자 중 한 쪽의 값이 1이면, 1을 결과로 얻는다. 그 외에는 0을 얻는다.
&(AND연산자) 피연산자 양 쪽이 모두 1이어야만 1을 결과로 얻는다. 그 외에는 0을 얻는다.
^(XOR연산자) 피연산자의 값이 서로 다를 때만 1을 결과로 얻는다 같을 때는 0을 얻는다.
x | y | x | y | x & y | x ^ y |
---|---|---|---|---|
1 | 1 | 1 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
이 연산자는 피연산자를 2진수로 표현했을 때, 0은 1로, 1은 0으로 바꾼다. 논리부정 연산자'!'와 유사하다.
x | ~x |
---|---|
1 | 0 |
0 | 1 |
x << n은 x*2^n의 결과와 같다
x >> n은 x/2^n의 결과와 같다
조건 연산자는 조건식, 식1, 식2 모두 세 개의 피연산자를 필요로 하는 삼항 연산자이며, 삼항 연산자는 조건 연산자 하나뿐이다
조건식의 평가결과가 true이면 식1이, false이면 식2가 연산결과가 된다
대입 연산자는 변수와 같은 저장공간에 값 또는 수식의 연산결과를 저장하는데 사용된다
대입 연산자는 다른 연산자(op)와 결합하여 'op='와 같은 방식으로 사용될 수 있다.
예를 들어, i=i+3을 i+=3으로 같이 표현할 수 있다.
op= | = |
---|---|
i += 3; | i = i + 3; |
i -= 3; | i = i - 3; |
i *= 3; | i = i * 3; |
i /= 3; | i = i / 3; |
i +%= 3; | i = i % 3; |
i <<= 3; | i = i << 3; |
i >>= 3; | i = i >> 3; |
i &= 3; | i = i & 3; |
i ^= 3; | i = i ^ 3; |
i |= 3; | i = i | 3; |
표의 왼쪽은 복합 연산자의 사용 예이고, 오른쪽은 대입 연산자를 이용한 왼쪽과 동일한 의미의 식이다.